From 03343239c770eac034bb1db07dd877fff53a77ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matth=C3=A4us=20G=2E=20Chajdas?= Date: Fri, 18 Aug 2017 13:37:29 +0200 Subject: [PATCH] Implement a Performance Counter Viewer pane, hook up selection dialog --- qrenderdoc/Code/CaptureContext.cpp | 18 +++++ qrenderdoc/Code/CaptureContext.h | 5 ++ qrenderdoc/Code/Interface/QRDInterface.h | 18 +++++ .../Dialogs/PerformanceCounterSelection.cpp | 57 +++++++++------- .../Dialogs/PerformanceCounterSelection.h | 48 +++++++------- qrenderdoc/Windows/MainWindow.cpp | 9 ++- qrenderdoc/Windows/MainWindow.ui | 2 +- .../Windows/PerformanceCounterViewer.cpp | 65 ++++++++++++------- qrenderdoc/Windows/PerformanceCounterViewer.h | 44 ++++++------- qrenderdoc/Windows/PythonShell.cpp | 13 ++++ 10 files changed, 183 insertions(+), 96 deletions(-) diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index 924de9966..4cfdb6d18 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -40,6 +40,7 @@ #include "Windows/Dialogs/LiveCapture.h" #include "Windows/EventBrowser.h" #include "Windows/MainWindow.h" +#include "Windows/PerformanceCounterViewer.h" #include "Windows/PipelineState/PipelineStateViewer.h" #include "Windows/PixelHistoryView.h" #include "Windows/PythonShell.h" @@ -732,6 +733,18 @@ IDebugMessageView *CaptureContext::GetDebugMessageView() return m_DebugMessageView; } +IPerformanceCounterViewer *CaptureContext::GetPerformanceCounterViewer() +{ + if(m_PerformanecCounterViewer) + return m_PerformanecCounterViewer; + + m_PerformanecCounterViewer = new PerformanceCounterViewer(*this, m_MainWindow); + m_PerformanecCounterViewer->setObjectName(lit("performanceCounterViewer")); + setupDockWindow(m_PerformanecCounterViewer); + + return m_PerformanecCounterViewer; +} + IStatisticsViewer *CaptureContext::GetStatisticsViewer() { if(m_StatisticsViewer) @@ -803,6 +816,11 @@ void CaptureContext::ShowDebugMessageView() m_MainWindow->showDebugMessageView(); } +void CaptureContext::ShowPerformanceCounterViewer() +{ + m_MainWindow->showPerformanceCounterViewer(); +} + void CaptureContext::ShowStatisticsViewer() { m_MainWindow->showStatisticsViewer(); diff --git a/qrenderdoc/Code/CaptureContext.h b/qrenderdoc/Code/CaptureContext.h index 2a3d4d023..e849d70bb 100644 --- a/qrenderdoc/Code/CaptureContext.h +++ b/qrenderdoc/Code/CaptureContext.h @@ -45,6 +45,7 @@ class BufferViewer; class TextureViewer; class CaptureDialog; class DebugMessageView; +class PerformanceCounterViewer; class StatisticsViewer; class TimelineBar; class PythonShell; @@ -133,6 +134,7 @@ public: IPipelineStateViewer *GetPipelineViewer() override; ICaptureDialog *GetCaptureDialog() override; IDebugMessageView *GetDebugMessageView() override; + IPerformanceCounterViewer *GetPerformanceCounterViewer() override; IStatisticsViewer *GetStatisticsViewer() override; ITimelineBar *GetTimelineBar() override; IPythonShell *GetPythonShell() override; @@ -144,6 +146,7 @@ public: bool HasMeshPreview() override { return m_MeshPreview != NULL; } bool HasCaptureDialog() override { return m_CaptureDialog != NULL; } bool HasDebugMessageView() override { return m_DebugMessageView != NULL; } + bool HasPerformanceCounterViewer() override { return m_PerformanecCounterViewer != NULL; } bool HasStatisticsViewer() override { return m_StatisticsViewer != NULL; } bool HasTimelineBar() override { return m_TimelineBar != NULL; } bool HasPythonShell() override { return m_PythonShell != NULL; } @@ -154,6 +157,7 @@ public: void ShowPipelineViewer() override; void ShowCaptureDialog() override; void ShowDebugMessageView() override; + void ShowPerformanceCounterViewer() override; void ShowStatisticsViewer() override; void ShowTimelineBar() override; void ShowPythonShell() override; @@ -278,6 +282,7 @@ private: PipelineStateViewer *m_PipelineViewer = NULL; CaptureDialog *m_CaptureDialog = NULL; DebugMessageView *m_DebugMessageView = NULL; + PerformanceCounterViewer *m_PerformanecCounterViewer = NULL; StatisticsViewer *m_StatisticsViewer = NULL; TimelineBar *m_TimelineBar = NULL; PythonShell *m_PythonShell = NULL; diff --git a/qrenderdoc/Code/Interface/QRDInterface.h b/qrenderdoc/Code/Interface/QRDInterface.h index b2dfc5b20..dfd01634c 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.h +++ b/qrenderdoc/Code/Interface/QRDInterface.h @@ -1147,6 +1147,13 @@ as well as messages generated during replay and analysis. )"); virtual IDebugMessageView *GetDebugMessageView() = 0; + DOCUMENT(R"(Retrieve the current singleton :class:`PerformanceCounterViewer`. + +:return: The current window, which is created (but not shown) it there wasn't one open. +:rtype: PerformanceCounterViewer +)"); + virtual IPerformanceCounterViewer *GetPerformanceCounterViewer() = 0; + DOCUMENT(R"(Retrieve the current singleton :class:`StatisticsViewer`. :return: The current window, which is created (but not shown) it there wasn't one open. @@ -1217,6 +1224,13 @@ as well as messages generated during replay and analysis. )"); virtual bool HasDebugMessageView() = 0; + DOCUMENT(R"(Check if there is a current :class:`PerformanceCounterViewer` open. + +:return: ``True`` if there is a window open. +:rtype: ``bool`` +)"); + virtual bool HasPerformanceCounterViewer() = 0; + DOCUMENT(R"(Check if there is a current :class:`StatisticsViewer` open. :return: ``True`` if there is a window open. @@ -1253,6 +1267,10 @@ as well as messages generated during replay and analysis. DOCUMENT( "Raise the current :class:`DebugMessageView`, showing it in the default place if needed."); virtual void ShowDebugMessageView() = 0; + DOCUMENT( + "Raise the current :class:`PerformanceCounterViewer`, showing it in the default place if " + "needed."); + virtual void ShowPerformanceCounterViewer() = 0; DOCUMENT( "Raise the current :class:`StatisticsViewer`, showing it in the default place if needed."); virtual void ShowStatisticsViewer() = 0; diff --git a/qrenderdoc/Windows/Dialogs/PerformanceCounterSelection.cpp b/qrenderdoc/Windows/Dialogs/PerformanceCounterSelection.cpp index 7fd1c9eff..016ca6d41 100644 --- a/qrenderdoc/Windows/Dialogs/PerformanceCounterSelection.cpp +++ b/qrenderdoc/Windows/Dialogs/PerformanceCounterSelection.cpp @@ -1,26 +1,26 @@ /****************************************************************************** -* The MIT License (MIT) -* -* Copyright (c) 2016-2017 Baldur Karlsson -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -* THE SOFTWARE. -******************************************************************************/ + * The MIT License (MIT) + * + * Copyright (c) 2016-2017 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ #include "PerformanceCounterSelection.h" #include "Code/CaptureContext.h" @@ -98,17 +98,19 @@ PerformanceCounterSelection::PerformanceCounterSelection(ICaptureContext &ctx, Q // Add auto listItem = new QListWidgetItem(ui->enabledCounters); listItem->setText(item->text(0)); - m_SelectedCounters.insert(d.toInt(), listItem); + m_SelectedCounters.insert(d.toUInt(), listItem); } else { // Remove - auto listItem = m_SelectedCounters.take(d.toInt()); + auto listItem = m_SelectedCounters.take(d.toUInt()); delete listItem; } } }); + connect(ui->sampleCounters, &QPushButton::pressed, [&]() -> void { this->accept(); }); + ui->counterTree->setMouseTracking(true); auto showCounters = [&](const QVector &counters) -> void { @@ -153,7 +155,7 @@ PerformanceCounterSelection::PerformanceCounterSelection(ICaptureContext &ctx, Q auto counterItem = new QTreeWidgetItem{categoryItem}; counterItem->setText(0, desc.name); counterItem->setData(0, Qt::UserRole + 1, desc.description); - counterItem->setData(0, Qt::UserRole + 2, (int32_t)desc.counterID); + counterItem->setData(0, Qt::UserRole + 2, (uint32_t)desc.counterID); counterItem->setCheckState(0, Qt::Unchecked); } }; @@ -173,3 +175,8 @@ PerformanceCounterSelection::~PerformanceCounterSelection() { delete ui; } + +QList PerformanceCounterSelection::GetSelectedCounters() const +{ + return m_SelectedCounters.keys(); +} diff --git a/qrenderdoc/Windows/Dialogs/PerformanceCounterSelection.h b/qrenderdoc/Windows/Dialogs/PerformanceCounterSelection.h index 20e5ebfb2..d82ee4e00 100644 --- a/qrenderdoc/Windows/Dialogs/PerformanceCounterSelection.h +++ b/qrenderdoc/Windows/Dialogs/PerformanceCounterSelection.h @@ -1,26 +1,26 @@ /****************************************************************************** -* The MIT License (MIT) -* -* Copyright (c) 2017 Baldur Karlsson -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -* THE SOFTWARE. -******************************************************************************/ + * The MIT License (MIT) + * + * Copyright (c) 2017 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ #include #include @@ -41,9 +41,11 @@ public: explicit PerformanceCounterSelection(ICaptureContext &ctx, QWidget *parent = 0); ~PerformanceCounterSelection(); + QList GetSelectedCounters() const; + private: Ui::PerformanceCounterSelection *ui; ICaptureContext &m_Ctx; - QMap m_SelectedCounters; + QMap m_SelectedCounters; }; diff --git a/qrenderdoc/Windows/MainWindow.cpp b/qrenderdoc/Windows/MainWindow.cpp index 40a9cde4e..c2eb098a7 100644 --- a/qrenderdoc/Windows/MainWindow.cpp +++ b/qrenderdoc/Windows/MainWindow.cpp @@ -41,7 +41,6 @@ #include "Windows/Dialogs/AboutDialog.h" #include "Windows/Dialogs/CaptureDialog.h" #include "Windows/Dialogs/LiveCapture.h" -#include "Windows/Dialogs/PerformanceCounterSelection.h" #include "Windows/Dialogs/RemoteManager.h" #include "Windows/Dialogs/SettingsDialog.h" #include "Windows/Dialogs/SuggestRemoteDialog.h" @@ -1647,8 +1646,12 @@ void MainWindow::on_actionShow_Tips_triggered() void MainWindow::on_action_Counter_Viewer_triggered() { - PerformanceCounterSelection pcs(m_Ctx, this); - RDDialog::show(&pcs); + QWidget *performanceCounterViewer = m_Ctx.GetPerformanceCounterViewer()->Widget(); + + if(ui->toolWindowManager->toolWindows().contains(performanceCounterViewer)) + ToolWindowManager::raiseToolWindow(performanceCounterViewer); + else + ui->toolWindowManager->addToolWindow(performanceCounterViewer, mainToolArea()); } void MainWindow::saveLayout_triggered() diff --git a/qrenderdoc/Windows/MainWindow.ui b/qrenderdoc/Windows/MainWindow.ui index ef0a67b7f..77d82d44b 100644 --- a/qrenderdoc/Windows/MainWindow.ui +++ b/qrenderdoc/Windows/MainWindow.ui @@ -408,7 +408,7 @@ - Counter selection + Performance Counter Viewer diff --git a/qrenderdoc/Windows/PerformanceCounterViewer.cpp b/qrenderdoc/Windows/PerformanceCounterViewer.cpp index 81b9db186..77c7e491d 100644 --- a/qrenderdoc/Windows/PerformanceCounterViewer.cpp +++ b/qrenderdoc/Windows/PerformanceCounterViewer.cpp @@ -1,28 +1,29 @@ /****************************************************************************** -* The MIT License (MIT) -* -* Copyright (c) 2017 Baldur Karlsson -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -* THE SOFTWARE. -******************************************************************************/ + * The MIT License (MIT) + * + * Copyright (c) 2017 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ #include "PerformanceCounterViewer.h" +#include "Windows/Dialogs/PerformanceCounterSelection.h" #include "ui_PerformanceCounterViewer.h" PerformanceCounterViewer::PerformanceCounterViewer(ICaptureContext &ctx, QWidget *parent) @@ -31,6 +32,26 @@ PerformanceCounterViewer::PerformanceCounterViewer(ICaptureContext &ctx, QWidget ui->setupUi(this); m_Ctx.AddLogViewer(this); + + connect(ui->captureCounters, &QToolButton::pressed, [=]() -> void { + PerformanceCounterSelection pcs(m_Ctx, this); + if(RDDialog::show(&pcs) == QDialog::Accepted) + { + const QList selectedCounters = pcs.GetSelectedCounters(); + + m_Ctx.Replay().AsyncInvoke([=](IReplayController *controller) -> void { + rdctype::array counters; + counters.create(selectedCounters.size()); + + for(int i = 0; i < selectedCounters.size(); ++i) + { + counters[i] = (GPUCounter)selectedCounters[i]; + } + + controller->FetchCounters(counters); + }); + } + }); } PerformanceCounterViewer::~PerformanceCounterViewer() diff --git a/qrenderdoc/Windows/PerformanceCounterViewer.h b/qrenderdoc/Windows/PerformanceCounterViewer.h index 0b8ce97f4..6d4b85ad9 100644 --- a/qrenderdoc/Windows/PerformanceCounterViewer.h +++ b/qrenderdoc/Windows/PerformanceCounterViewer.h @@ -1,26 +1,26 @@ /****************************************************************************** -* The MIT License (MIT) -* -* Copyright (c) 2017 Baldur Karlsson -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -* THE SOFTWARE. -******************************************************************************/ + * The MIT License (MIT) + * + * Copyright (c) 2017 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ #pragma once diff --git a/qrenderdoc/Windows/PythonShell.cpp b/qrenderdoc/Windows/PythonShell.cpp index 7ca6d70ff..2dd990604 100644 --- a/qrenderdoc/Windows/PythonShell.cpp +++ b/qrenderdoc/Windows/PythonShell.cpp @@ -202,6 +202,11 @@ struct CaptureContextInvoker : ICaptureContext { return InvokeRetFunction(&ICaptureContext::GetDebugMessageView); } + virtual IPerformanceCounterViewer *GetPerformanceCounterViewer() override + { + return InvokeRetFunction( + &ICaptureContext::GetPerformanceCounterViewer); + } virtual IStatisticsViewer *GetStatisticsViewer() override { return InvokeRetFunction(&ICaptureContext::GetStatisticsViewer); @@ -242,6 +247,10 @@ struct CaptureContextInvoker : ICaptureContext { return InvokeRetFunction(&ICaptureContext::HasDebugMessageView); } + virtual bool HasPerformanceCounterViewer() override + { + return InvokeRetFunction(&ICaptureContext::HasPerformanceCounterViewer); + } virtual bool HasStatisticsViewer() override { return InvokeRetFunction(&ICaptureContext::HasStatisticsViewer); @@ -280,6 +289,10 @@ struct CaptureContextInvoker : ICaptureContext { InvokeVoidFunction(&ICaptureContext::ShowDebugMessageView); } + virtual void ShowPerformanceCounterViewer() override + { + InvokeVoidFunction(&ICaptureContext::ShowPerformanceCounterViewer); + } virtual void ShowStatisticsViewer() override { InvokeVoidFunction(&ICaptureContext::ShowStatisticsViewer);