From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- gfx/angle/checkout/src/libANGLE/Overlay.cpp | 103 ++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 gfx/angle/checkout/src/libANGLE/Overlay.cpp (limited to 'gfx/angle/checkout/src/libANGLE/Overlay.cpp') diff --git a/gfx/angle/checkout/src/libANGLE/Overlay.cpp b/gfx/angle/checkout/src/libANGLE/Overlay.cpp new file mode 100644 index 0000000000..e84b125361 --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/Overlay.cpp @@ -0,0 +1,103 @@ +// +// Copyright 2019 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Overlay.cpp: +// Implements the Overlay class. +// + +#include "libANGLE/Overlay.h" + +#include "common/string_utils.h" +#include "common/system_utils.h" +#include "libANGLE/Context.h" +#include "libANGLE/Overlay_font_autogen.h" +#include "libANGLE/renderer/GLImplFactory.h" +#include "libANGLE/renderer/OverlayImpl.h" + +#include + +namespace gl +{ +namespace +{ +#define ANGLE_WIDGET_NAME_PROC(WIDGET_ID) {ANGLE_STRINGIFY(WIDGET_ID), WidgetId::WIDGET_ID}, + +constexpr std::pair kWidgetNames[] = { + ANGLE_WIDGET_ID_X(ANGLE_WIDGET_NAME_PROC)}; +} // namespace + +OverlayState::OverlayState() : mEnabledWidgetCount(0), mOverlayWidgets{} {} +OverlayState::~OverlayState() = default; + +Overlay::Overlay(rx::GLImplFactory *factory) + : mLastPerSecondUpdate(0), mImplementation(factory->createOverlay(mState)) +{} +Overlay::~Overlay() = default; + +void Overlay::init() +{ + initOverlayWidgets(); + mLastPerSecondUpdate = angle::GetCurrentSystemTime(); + + ASSERT(std::all_of( + mState.mOverlayWidgets.begin(), mState.mOverlayWidgets.end(), + [](const std::unique_ptr &widget) { return widget.get() != nullptr; })); + + enableOverlayWidgetsFromEnvironment(); +} + +void Overlay::destroy(const gl::Context *context) +{ + ASSERT(mImplementation); + mImplementation->onDestroy(context); +} + +void Overlay::enableOverlayWidgetsFromEnvironment() +{ + std::vector enabledWidgets = angle::GetStringsFromEnvironmentVarOrAndroidProperty( + "ANGLE_OVERLAY", "debug.angle.overlay", ":"); + + for (const std::pair &widgetName : kWidgetNames) + { + for (const std::string &enabledWidget : enabledWidgets) + { + if (angle::NamesMatchWithWildcard(enabledWidget.c_str(), widgetName.first)) + { + mState.mOverlayWidgets[widgetName.second]->enabled = true; + ++mState.mEnabledWidgetCount; + break; + } + } + } +} + +void Overlay::onSwap() const +{ + // Increment FPS counter. + getPerSecondWidget(WidgetId::FPS)->add(1); + + // Update per second values every second. + double currentTime = angle::GetCurrentSystemTime(); + double timeDiff = currentTime - mLastPerSecondUpdate; + if (timeDiff >= 1.0) + { + for (const std::unique_ptr &widget : mState.mOverlayWidgets) + { + if (widget->type == WidgetType::PerSecond) + { + overlay::PerSecond *perSecond = + reinterpret_cast(widget.get()); + perSecond->lastPerSecondCount = static_cast(perSecond->count / timeDiff); + perSecond->count = 0; + } + } + mLastPerSecondUpdate += 1.0; + } +} + +MockOverlay::MockOverlay(rx::GLImplFactory *implFactory) {} +MockOverlay::~MockOverlay() = default; + +} // namespace gl -- cgit v1.2.3