197 lines · 7.3 KB · C
RawDownload
////  Created by Bradley Austin Davis on 2019/05/14//  Copyright 2013-2019 High Fidelity, Inc.//  Copyright 2022-2023 Overte e.V.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html//  SPDX-License-Identifier: Apache-2.0// #pragma once#ifndef hifi_PerformanceScriptingInterface_h#define hifi_PerformanceScriptingInterface_h #include <mutex> #include <QObject> #include "../PerformanceManager.h"#include "../RefreshRateManager.h"  /*@jsdoc * The <code>Performance</code> API provides control and information on graphics performance settings. * * @namespace Performance * * @hifi-interface * @hifi-client-entity * @hifi-avatar * * @property {Performance.PerformancePreset} performancePreset - The current graphics performance preset. * @property {Performance.RefreshRateProfile} refreshRateProfile - The current refresh rate profile. */class PerformanceScriptingInterface : public QObject {    Q_OBJECT    Q_PROPERTY(PerformancePreset performancePreset READ getPerformancePreset WRITE setPerformancePreset NOTIFY settingsChanged)    Q_PROPERTY(RefreshRateProfile refreshRateProfile READ getRefreshRateProfile WRITE setRefreshRateProfile NOTIFY settingsChanged) public:     /*@jsdoc     * <p>Graphics performance presets.</p>     * <table>     *   <thead>     *     <tr><th>Value</th><th>Name</th><th>Description</th>     *   </thead>     *   <tbody>     *     <tr><td><code>0</code></td><td>UNKNOWN</td><td>Custom settings of world detail, rendering effects, and refresh      *       rate.</td></tr>     *     <tr><td><code>1</code></td><td>LOW</td><td>Low world detail, no rendering effects, lo refresh rate.</td></tr>     *     <tr><td><code>2</code></td><td>MID</td><td>Medium world detail, some rendering effects, medium refresh      *       rate.</td></tr>     *     <tr><td><code>3</code></td><td>HIGH</td><td>Maximum world detail, all rendering effects, high refresh rate.</td></tr>     *   </tbody>     * </table>     * @typedef {number} Performance.PerformancePreset     */    // PerformanceManager PerformancePreset tri state level enums    enum class PerformancePreset {        UNKNOWN = PerformanceManager::PerformancePreset::UNKNOWN,        LOW_POWER = PerformanceManager::PerformancePreset::LOW_POWER,        LOW = PerformanceManager::PerformancePreset::LOW,        MID = PerformanceManager::PerformancePreset::MID,        HIGH = PerformanceManager::PerformancePreset::HIGH,        CUSTOM = PerformanceManager::PerformancePreset::CUSTOM    };    Q_ENUM(PerformancePreset)     /*@jsdoc     * <p>Refresh rate profile.</p>     * <table>     *   <thead>     *     <tr><th>Value</th><th>Name</th><th>Description</th>     *   </thead>     *   <tbody>     *     <tr><td><code>0</code></td><td>ECO</td><td>Low refresh rate, which is reduced when Interface doesn't have focus or      *       is minimized.</td></tr>     *     <tr><td><code>1</code></td><td>INTERACTIVE</td><td>Medium refresh rate, which is reduced when Interface doesn't have      *       focus or is minimized.</td></tr>     *     <tr><td><code>2</code></td><td>REALTIME</td><td>High refresh rate, even when Interface doesn't have focus or is      *       minimized. </td></tr>     *   </tbody>     * </table>     * @typedef {number} Performance.RefreshRateProfile     */    // Must match RefreshRateManager enums    enum class RefreshRateProfile {        ECO = RefreshRateManager::RefreshRateProfile::ECO,        INTERACTIVE = RefreshRateManager::RefreshRateProfile::INTERACTIVE,        REALTIME = RefreshRateManager::RefreshRateProfile::REALTIME,    };    Q_ENUM(RefreshRateProfile)     PerformanceScriptingInterface();    ~PerformanceScriptingInterface() = default; public slots:     /*@jsdoc     * Sets graphics performance to a preset.     * @function Performance.setPerformancePreset     * @param {Performance.PerformancePreset} performancePreset - The graphics performance preset to use.     */    void setPerformancePreset(PerformancePreset performancePreset);     /*@jsdoc     * Gets the current graphics performance preset in use.     * @function Performance.getPerformancePreset     * @returns {Performance.PerformancePreset} The current graphics performance preset in use.     */    PerformancePreset getPerformancePreset() const;     /*@jsdoc     * Gets the names of the graphics performance presets.     * @function Performance.getPerformancePresetNames     * @returns {string[]} The names of the graphics performance presets. The array index values correspond to      *     {@link Performance.PerformancePreset} values.     */    QStringList getPerformancePresetNames() const;      /*@jsdoc     * Sets the curfrent refresh rate profile.     * @function Performance.setRefreshRateProfile     * @param {Performance.RefreshRateProfile} refreshRateProfile - The refresh rate profile.     */    void setRefreshRateProfile(RefreshRateProfile refreshRateProfile);     /*@jsdoc     * Sets a custom refresh rate.     * @function Performance.setCustomRefreshRate     * @param {RefreshRateRegime} refreshRateRegime - The refresh rate regime     * @param {int} value - The value for the regime     */    void setCustomRefreshRate(RefreshRateManager::RefreshRateRegime refreshRateRegime, int value);     /*@jsdoc     * Gets the value for a specific RefreshRateRegime.     * @function Performance.getCustomRefreshRate     * @param {RefreshRateRegime} - The regime to get the value from     * @returns {int} - The value from the specified regime     */    int getCustomRefreshRate(RefreshRateManager::RefreshRateRegime regime) const;     /*@jsdoc     * Gets the current refresh rate profile in use.     * @function Performance.getRefreshRateProfile     * @returns {Performance.RefreshRateProfile} The refresh rate profile.     */    RefreshRateProfile getRefreshRateProfile() const;     /*@jsdoc     * Gets the names of the refresh rate profiles.     * @function Performance.getRefreshRateProfileNames     * @returns {string[]} The names of the refresh rate profiles. The array index values correspond to      *     {@link Performance.RefreshRateProfile} values.     */    QStringList getRefreshRateProfileNames() const;      /*@jsdoc     * Gets the current target refresh rate, in Hz, per the current refresh rate profile and refresh rate regime if in desktop      * mode; a higher rate if in VR mode.     * @function Performance.getActiveRefreshRate     * @returns {number} The current target refresh rate, in Hz.     */    int getActiveRefreshRate() const;     /*@jsdoc     * Gets the current user experience mode.     * @function Performance.getUXMode     * @returns {UXMode} The current user experience mode.     */    RefreshRateManager::UXMode getUXMode() const;     /*@jsdoc     * Gets the current refresh rate regime that's in effect.     * @function Performance.getRefreshRateRegime     * @returns {RefreshRateRegime} The current refresh rate regime.     */    RefreshRateManager::RefreshRateRegime getRefreshRateRegime() const; signals:     /*@jsdoc     * Triggered when the performance preset or refresh rate profile is changed.     * @function Performance.settingsChanged     * @returns {Signal}     */    void settingsChanged(); private:    static std::once_flag registry_flag;}; #endif // header guard