diff --git a/interface/src/workload/GameWorkload.cpp b/interface/src/workload/GameWorkload.cpp index 63fe440fcd..e71463d85a 100644 --- a/interface/src/workload/GameWorkload.cpp +++ b/interface/src/workload/GameWorkload.cpp @@ -19,6 +19,7 @@ GameWorkloadContext::~GameWorkloadContext() { GameWorkload::GameWorkload() { + } GameWorkload::~GameWorkload() { diff --git a/libraries/task/src/task/Config.cpp b/libraries/task/src/task/Config.cpp index b378237c9c..b63165adbe 100644 --- a/libraries/task/src/task/Config.cpp +++ b/libraries/task/src/task/Config.cpp @@ -18,6 +18,8 @@ using namespace task; +int nakedJobConfigPointerTypeId = qRegisterMetaType(); + void JobConfig::setPresetList(const QJsonObject& object) { for (auto it = object.begin(); it != object.end(); it++) { JobConfig* child = findChild(it.key(), Qt::FindDirectChildrenOnly); diff --git a/libraries/task/src/task/Config.h b/libraries/task/src/task/Config.h index d2cc1a8cd8..adb8a60c8e 100644 --- a/libraries/task/src/task/Config.h +++ b/libraries/task/src/task/Config.h @@ -86,17 +86,19 @@ protected: // A default Config is always on; to create an enableable Config, use the ctor JobConfig(bool enabled) class JobConfig : public QObject { Q_OBJECT - Q_PROPERTY(double cpuRunTime READ getCPURunTime NOTIFY newStats()) //ms - Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY dirtyEnabled()) + Q_PROPERTY(double cpuRunTime READ getCPURunTime NOTIFY newStats()) //ms + Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY dirtyEnabled()) - double _msCPURunTime{ 0.0 }; + double _msCPURunTime{ 0.0 }; public: using Persistent = PersistentConfig; + using QConfigList = QList; JobConfig() = default; + // JobConfig(const JobConfig& src) = default; JobConfig(bool enabled) : alwaysEnabled{ false }, enabled{ enabled } {} - bool isEnabled() const { return alwaysEnabled || enabled; } + bool isEnabled() { return alwaysEnabled || enabled; } void setEnabled(bool enable) { enabled = alwaysEnabled || enable; emit dirtyEnabled(); } bool alwaysEnabled{ true }; @@ -113,7 +115,12 @@ public: void setCPURunTime(double mstime) { _msCPURunTime = mstime; emit newStats(); } double getCPURunTime() const { return _msCPURunTime; } -public slots: + Q_INVOKABLE virtual bool isTask() const { return false; } + Q_INVOKABLE virtual QConfigList getSubConfigs() const { return QConfigList(); } + Q_INVOKABLE virtual int getNumSubs() const { return 0; } + Q_INVOKABLE virtual JobConfig* getSubConfig(int i) const { return nullptr; } + + public slots: void load(const QJsonObject& val) { qObjectFromJsonValue(val, *this); emit loaded(); } signals: @@ -122,6 +129,8 @@ signals: void dirtyEnabled(); }; +using QConfigPointer = std::shared_ptr; + class TConfigProxy { public: using Config = JobConfig; @@ -130,11 +139,12 @@ public: class TaskConfig : public JobConfig { Q_OBJECT public: - using QConfigPointer = std::shared_ptr; + using QConfigList = QList; using Persistent = PersistentConfig; - TaskConfig() = default ; + TaskConfig() = default; + // TaskConfig(const TaskConfig& src) = default; TaskConfig(bool enabled) : JobConfig(enabled) {} @@ -156,7 +166,8 @@ public: if (tokens.empty()) { tokens.push_back(QString()); - } else { + } + else { while (tokens.size() > 1) { auto name = tokens.front(); tokens.pop_front(); @@ -170,6 +181,22 @@ public: return root->findChild(tokens.front()); } + Q_INVOKABLE bool isTask() const override { return true; } + Q_INVOKABLE QConfigList getSubConfigs() const override { + auto list = findChildren(QRegExp(".*"), Qt::FindDirectChildrenOnly); + QConfigList returned; + for (int i = 0; i < list.size(); i++) { + returned.push_back(list[i]); + } + return returned; + } + + Q_INVOKABLE int getNumSubs() const override { return getSubConfigs().size(); } + Q_INVOKABLE JobConfig* getSubConfig(int i) const override { + auto subs = getSubConfigs(); + return ((i < 0 || i >= subs.size()) ? nullptr : subs[i] ); + } + void connectChildConfig(QConfigPointer childConfig, const std::string& name); void transferChildrenConfigs(QConfigPointer source); @@ -179,8 +206,8 @@ public slots: void refresh(); }; -using QConfigPointer = std::shared_ptr; - } +Q_DECLARE_METATYPE(task::JobConfig*); + #endif // hifi_task_Config_h diff --git a/scripts/developer/utilities/lib/jet/TaskList.qml b/scripts/developer/utilities/lib/jet/TaskList.qml new file mode 100644 index 0000000000..04e6184fc0 --- /dev/null +++ b/scripts/developer/utilities/lib/jet/TaskList.qml @@ -0,0 +1,150 @@ +// +// jet/TaskList.qml +// +// Created by Sam Gateau, 2018/03/28 +// Copyright 2018 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +//import QtQuick 2.7 +//import QtQuick.Controls 1.4 as Original +//import QtQuick.Controls.Styles 1.4 + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +//import Hifi 1.0 as Hifi + +//import "qrc:///qml/styles-uit" +//import "qrc:///qml/controls-uit" as HifiControls + +import "jet_qml.js" as Jet + +Rectangle { + id: root + width: parent ? parent.width : 100 + height: parent ? parent.height : 100 + property var config + + property var renderConfig : Render + + TextArea { + id: textArea + width: parent.width + height: parent.height + text: "" + } + + Component.onCompleted: { + // Connect the signal from Selection when any selection content change and use it to refresh the current selection view + // Selection.selectedItemsListChanged.connect(resetSelectionView) + var message = "On Completed: \n" + var functor = Jet.job_print_functor(function (line) { message += line + "\n"; }); + // Jet.task_traverseTree(Render, functor); + var lroot = Workload; + functor(lroot,0,0) + // message += Workload["getSubConfigs"]() + '\n' + + //var subs = Workload; + message += " subs size = " + lroot.getNumSubs() + for (var i = 0; i < lroot.getNumSubs(); i++) { + if (functor(lroot.getSubConfig(i), depth, i)) { + // task_traverse(subs[i], functor, depth) + } + } + textArea.append(message); + } + function fromScript(mope) { + //print(message) + //var message = mope + '\n'; + var message ='\n'; + + // Jet.task_traverseTree(Render, Jet.job_print_functor(function (line) { message += line + "\n"; }) ); + /* + + Render.findChildren();*/ + + // message += (Render.getSubConfigs()) + // Render.getConfig("").findChildren(); +/**//* + var job = Render; + message +=(job.objectName + " " + (job.enabled ? "on" : "off")) + '\n'; + var keys = Jet.job_propKeys(job); + for (var p=0; p < keys.length;p++) { + var prop = job[keys[p]] + message += (typeof prop + " " + keys[p] + " " + prop) + '\n'; + }*/ +/* +function task_traverse(root, functor, depth) { + if (root.isTask()) { + var subs = root.getSubConfigs() + depth++; + for (var i = 0; i