// // Created by Bradley Austin Davis on 2016/12/12 // Copyright 2013-2016 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 // #include "TestScriptingInterface.h" #include #include #include #include #include #include #include "Application.h" TestScriptingInterface* TestScriptingInterface::getInstance() { static TestScriptingInterface sharedInstance; return &sharedInstance; } void TestScriptingInterface::quit() { qApp->quit(); } void TestScriptingInterface::waitForTextureIdle() { waitForCondition(0, []()->bool { return (0 == gpu::Context::getTextureGPUTransferCount()); }); } void TestScriptingInterface::waitForDownloadIdle() { waitForCondition(0, []()->bool { return (0 == ResourceCache::getLoadingRequestCount()) && (0 == ResourceCache::getPendingRequestCount()); }); } void TestScriptingInterface::waitForProcessingIdle() { auto statTracker = DependencyManager::get(); waitForCondition(0, [statTracker]()->bool { return (0 == statTracker->getStat("Processing").toInt() && 0 == statTracker->getStat("PendingProcessing").toInt()); }); } void TestScriptingInterface::waitIdle() { // Initial wait for some incoming work QThread::sleep(1); waitForDownloadIdle(); waitForProcessingIdle(); waitForTextureIdle(); } bool TestScriptingInterface::loadTestScene(QString scene) { // FIXME implement // qApp->postLambdaEvent([isClient] { // auto tree = qApp->getEntityClipboard(); // tree->setIsClient(isClient); // }); /* Test.setClientTree(false); Resources.overrideUrlPrefix("atp:/", TEST_BINARY_ROOT + scene + ".atp/"); if (!Clipboard.importEntities(TEST_SCENES_ROOT + scene + ".json")) { return false; } var position = { x: 0, y: 0, z: 0 }; var pastedEntityIDs = Clipboard.pasteEntities(position); for (var id in pastedEntityIDs) { print("QQQ ID imported " + id); } */ return false; } bool TestScriptingInterface::startTracing(QString logrules) { if (!logrules.isEmpty()) { QLoggingCategory::setFilterRules(logrules); } if (!DependencyManager::isSet()) { return false; } DependencyManager::get()->startTracing(); return true; } bool TestScriptingInterface::stopTracing(QString filename) { if (!DependencyManager::isSet()) { return false; } auto tracer = DependencyManager::get(); tracer->stopTracing(); tracer->serialize(filename); return true; } void TestScriptingInterface::clear() { qApp->postLambdaEvent([] { qApp->getEntities()->clear(); }); } bool TestScriptingInterface::waitForConnection(qint64 maxWaitMs) { // Wait for any previous connection to die QThread::sleep(1); return waitForCondition(maxWaitMs, []()->bool { return DependencyManager::get()->getDomainHandler().isConnected(); }); } void TestScriptingInterface::wait(int milliseconds) { QThread::msleep(milliseconds); } bool TestScriptingInterface::waitForCondition(qint64 maxWaitMs, std::function condition) { QElapsedTimer elapsed; elapsed.start(); while (!condition()) { if (maxWaitMs > 0 && elapsed.elapsed() > maxWaitMs) { return false; } QThread::msleep(1); } return condition(); }