[Scummvm-git-logs] scummvm master -> 70b4b442e00ad28a4ab8557d31fdf9eec6a8b7d1

scemino noreply at scummvm.org
Thu Mar 21 19:46:20 UTC 2024


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
c40c59845f TWP: Don't allow to point object when over HUD
70b4b442e0 TWP: Add stats and fix performance issues


Commit: c40c59845f549581b33bf52a7b0cec1ac890fb58
    https://github.com/scummvm/scummvm/commit/c40c59845f549581b33bf52a7b0cec1ac890fb58
Author: scemino (scemino74 at gmail.com)
Date: 2024-03-21T20:46:10+01:00

Commit Message:
TWP: Don't allow to point object when over HUD

Changed paths:
    engines/twp/hud.h
    engines/twp/scenegraph.cpp
    engines/twp/scenegraph.h
    engines/twp/twp.cpp


diff --git a/engines/twp/hud.h b/engines/twp/hud.h
index 78508c0d327..4fd372bd8db 100644
--- a/engines/twp/hud.h
+++ b/engines/twp/hud.h
@@ -108,7 +108,7 @@ public:
 
 	void init();
 	ActorSlot *actorSlot(Common::SharedPtr<Object> actor);
-	bool isOver() const { return _over; }
+	bool isOverVerbs() const { return _over; }
 	void update(float elapsed, Math::Vector2d pos, Common::SharedPtr<Object> hotspot, bool mouseClick);
 
 	void setVisible(bool visible) override;
diff --git a/engines/twp/scenegraph.cpp b/engines/twp/scenegraph.cpp
index dc8d517038d..559fbb9d668 100644
--- a/engines/twp/scenegraph.cpp
+++ b/engines/twp/scenegraph.cpp
@@ -698,6 +698,7 @@ void Inventory::update(float elapsed, Common::SharedPtr<Object> actor, Color bac
 	_obj = nullptr;
 	if (_actor) {
 		Math::Vector2d scrPos = g_twp->winToScreen(g_twp->_cursor.pos);
+		_over = scrPos.getY() < 180.f && scrPos.getX() > 704.f;
 
 		// update mouse click
 		bool down = g_twp->_cursor.leftDown;
diff --git a/engines/twp/scenegraph.h b/engines/twp/scenegraph.h
index 02e5fad842b..e43f5ebacb6 100644
--- a/engines/twp/scenegraph.h
+++ b/engines/twp/scenegraph.h
@@ -296,6 +296,7 @@ public:
 	Inventory();
 	void update(float elapsed, Common::SharedPtr<Object> actor = nullptr, Color backColor = Color(0, 0, 0), Color verbNormal = Color(0, 0, 0));
 
+	bool isOver() const { return _over; }
 	Common::SharedPtr<Object> getObject() const { return _obj; }
 	Math::Vector2d getPos(Common::SharedPtr<Object> inv) const;
 
@@ -322,6 +323,7 @@ private:
 	float _jiggleTime = 0.f;
 	float _fadeTime = 0.f;
 	bool _fadeIn = false;
+	bool _over = false;
 };
 
 class SentenceNode : public Node {
diff --git a/engines/twp/twp.cpp b/engines/twp/twp.cpp
index e2e14223dd1..45eec7f36bc 100644
--- a/engines/twp/twp.cpp
+++ b/engines/twp/twp.cpp
@@ -241,23 +241,21 @@ void TwpEngine::clickedAt(Math::Vector2d scrPos) {
 		if (_cursor.isLeftDown()) {
 			// button left: execute selected verb
 			bool handled = clickedAtHandled(roomPos);
-			if (!handled && obj) {
+			if (!handled && obj && (!_hud->_active || _uiInv.isOver())) {
 				Verb vb = verb();
 				sqcall("onVerbClick");
 				handled = execSentence(nullptr, vb.id, _noun1, _noun2);
 			}
-			if (!handled && !_hud->_active) {
-				if (_actor && (scrPos.getY() > 172)) {
-					// Just clicking on the ground
-					cancelSentence(_actor);
-					if (_actor->_room == _room)
-						Object::walk(_actor, roomPos);
-					_hud->_verb = _hud->actorSlot(_actor)->verbs[0];
-					_holdToMove = true;
-				}
+			if (!handled && !_hud->_active && _actor && (!_hud->_active || _uiInv.isOver())) {
+				// Just clicking on the ground
+				cancelSentence(_actor);
+				if (_actor->_room == _room)
+					Object::walk(_actor, roomPos);
+				_hud->_verb = _hud->actorSlot(_actor)->verbs[0];
+				_holdToMove = true;
 			}
 
-		} else if (_cursor.isRightDown()) {
+		} else if (_cursor.isRightDown() && (!_hud->_active || _uiInv.isOver())) {
 			// button right: execute default verb
 			if (obj) {
 				VerbId verb;
@@ -280,30 +278,31 @@ Verb TwpEngine::verb() {
 
 Common::String TwpEngine::cursorText() {
 	Common::String result;
-	if (_dialog->getState() == DialogState::None && _inputState.getInputActive()) {
-		if (_hud->isVisible() && _hud->_over) {
-			return _hud->_verb.id.id > 1 ? _textDb->getText(verb().text) : "";
-		}
-
-		// give can be used only on inventory and talkto to talkable objects (actors)
-		result = !_noun1 || (_hud->_verb.id.id == VERB_GIVE && !_noun1->inInventory()) || (_hud->_verb.id.id == VERB_TALKTO && !(_noun1->getFlags() & TALKABLE)) ? "" : _textDb->getText(_noun1->getName());
-
-		// add verb if not walk to or if noun1 is present
-		if ((_hud->_verb.id.id > 1) || (result.size() > 0)) {
-			// if inventory, use default verb instead of walkto
-			Common::String verbText = verb().text;
-			result = result.size() > 0 ? Common::String::format("%s %s", _textDb->getText(verbText).c_str(), result.c_str()) : _textDb->getText(verbText);
-			if (_useFlag == UseFlag::ufUseWith)
-				result += " " + _textDb->getText(10000);
-			else if (_useFlag == UseFlag::ufUseOn)
-				result += " " + _textDb->getText(10001);
-			else if (_useFlag == UseFlag::ufUseIn)
-				result += " " + _textDb->getText(10002);
-			else if (_useFlag == UseFlag::ufGiveTo)
-				result += " " + _textDb->getText(10003);
-			if (_noun2)
-				result += " " + _textDb->getText(_noun2->getName());
-		}
+	if (_dialog->getState() != DialogState::None || !_inputState.getInputActive())
+		return result;
+
+	if (_hud->_active && !_uiInv.isOver()) {
+		return _hud->_verb.id.id > 1 ? _textDb->getText(verb().text) : "";
+	}
+
+	// give can be used only on inventory and talkto to talkable objects (actors)
+	result = !_noun1 || (_hud->_verb.id.id == VERB_GIVE && !_noun1->inInventory()) || (_hud->_verb.id.id == VERB_TALKTO && !(_noun1->getFlags() & TALKABLE)) ? "" : _textDb->getText(_noun1->getName());
+
+	// add verb if not walk to or if noun1 is present
+	if ((_hud->_verb.id.id > 1) || (result.size() > 0)) {
+		// if inventory, use default verb instead of walkto
+		Common::String verbText = verb().text;
+		result = result.size() > 0 ? Common::String::format("%s %s", _textDb->getText(verbText).c_str(), result.c_str()) : _textDb->getText(verbText);
+		if (_useFlag == UseFlag::ufUseWith)
+			result += " " + _textDb->getText(10000);
+		else if (_useFlag == UseFlag::ufUseOn)
+			result += " " + _textDb->getText(10001);
+		else if (_useFlag == UseFlag::ufUseIn)
+			result += " " + _textDb->getText(10002);
+		else if (_useFlag == UseFlag::ufGiveTo)
+			result += " " + _textDb->getText(10003);
+		if (_noun2)
+			result += " " + _textDb->getText(_noun2->getName());
 	}
 	return result;
 }
@@ -617,7 +616,7 @@ void TwpEngine::update(float elapsed) {
 	}
 
 	// update inventory
-	const bool hudActive = (_room->_fullscreen == FULLSCREENROOM && (scrPos.getY() < 204.f));
+	const bool hudActive = (_room->_fullscreen == FULLSCREENROOM && (scrPos.getY() < 180.f));
 	_hud->_active = hudActive;
 	_uiInv._active = hudActive;
 	if (!_actor) {


Commit: 70b4b442e00ad28a4ab8557d31fdf9eec6a8b7d1
    https://github.com/scummvm/scummvm/commit/70b4b442e00ad28a4ab8557d31fdf9eec6a8b7d1
Author: scemino (scemino74 at gmail.com)
Date: 2024-03-21T20:46:10+01:00

Commit Message:
TWP: Add stats and fix performance issues

Changed paths:
    engines/twp/actorlib.cpp
    engines/twp/debugtools.cpp
    engines/twp/resmanager.h
    engines/twp/room.cpp
    engines/twp/squtil.cpp
    engines/twp/thread.cpp
    engines/twp/thread.h
    engines/twp/twp.cpp
    engines/twp/twp.h


diff --git a/engines/twp/actorlib.cpp b/engines/twp/actorlib.cpp
index 78ccc05250a..ca80ea3387b 100644
--- a/engines/twp/actorlib.cpp
+++ b/engines/twp/actorlib.cpp
@@ -795,7 +795,9 @@ static SQInteger createActor(HSQUIRRELVM v) {
 	sq_resetobject(&actor->_table);
 	sq_getstackobj(v, 2, &actor->_table);
 	sq_addref(vm, &actor->_table);
-	setId(actor->_table, g_twp->_resManager->newActorId());
+	const int id = g_twp->_resManager->newActorId();
+	setId(actor->_table, id);
+	g_twp->_resManager->_allObjects[id] = actor;
 
 	Common::String key;
 	sqgetf(actor->_table, "_key", key);
diff --git a/engines/twp/debugtools.cpp b/engines/twp/debugtools.cpp
index 639750a4f41..b43e848362d 100644
--- a/engines/twp/debugtools.cpp
+++ b/engines/twp/debugtools.cpp
@@ -72,13 +72,14 @@ static void drawThreads() {
 		ImGui::Text("# threads: %u", threads.size());
 		ImGui::Separator();
 
-		if (ImGui::BeginTable("Threads", 6, ImGuiTableFlags_Borders | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_Resizable | ImGuiTableFlags_RowBg)) {
+		if (ImGui::BeginTable("Threads", 7, ImGuiTableFlags_Borders | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_Resizable | ImGuiTableFlags_RowBg)) {
 			ImGui::TableSetupColumn("Id");
 			ImGui::TableSetupColumn("Name");
 			ImGui::TableSetupColumn("Type");
 			ImGui::TableSetupColumn("Func");
 			ImGui::TableSetupColumn("Src");
 			ImGui::TableSetupColumn("Line");
+			ImGui::TableSetupColumn("Upd. Time");
 			ImGui::TableHeadersRow();
 
 			if (g_twp->_cutscene) {
@@ -102,6 +103,8 @@ static void drawThreads() {
 					ImGui::TableNextColumn();
 					ImGui::TableNextColumn();
 				}
+				ImGui::TableNextColumn();
+				ImGui::Text("?");
 			}
 
 			for (const auto &thread : threads) {
@@ -124,6 +127,8 @@ static void drawThreads() {
 					ImGui::TableNextColumn();
 					ImGui::TableNextColumn();
 				}
+				ImGui::TableNextColumn();
+				ImGui::Text("%u", thread->_lastUpdateTime);
 			}
 			ImGui::EndTable();
 		}
@@ -557,6 +562,14 @@ static void drawGeneral() {
 	ImGui::Separator();
 
 	ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
+	ImGui::Text("Draw time: %u ms", g_twp->_stats.drawTime);
+	ImGui::Text("Update time: %u ms", g_twp->_stats.totalUpdateTime);
+	ImGui::Text("  Update room time: %u ms", g_twp->_stats.updateRoomTime);
+	ImGui::Text("  Update tasks time: %u ms", g_twp->_stats.updateTasksTime);
+	ImGui::Text("  Update misc time: %u ms", g_twp->_stats.updateMiscTime);
+	ImGui::Text("  Update cutscene time: %u ms", g_twp->_stats.updateCutsceneTime);
+	ImGui::Text("  Update threads time: %u ms", g_twp->_stats.updateThreadsTime);
+	ImGui::Text("  Update callbacks time: %u ms", g_twp->_stats.updateCallbacksTime);
 	ImGui::End();
 }
 
diff --git a/engines/twp/resmanager.h b/engines/twp/resmanager.h
index f26a8a1845f..3e4e2057f8f 100644
--- a/engines/twp/resmanager.h
+++ b/engines/twp/resmanager.h
@@ -29,6 +29,8 @@
 
 namespace Twp {
 
+class Font;
+
 class ResManager {
 private:
 	enum {
@@ -86,6 +88,7 @@ public:
 	Common::HashMap<Common::String, Texture> _textures;
 	Common::HashMap<Common::String, SpriteSheet> _spriteSheets;
 	Common::HashMap<Common::String, Common::SharedPtr<Font> > _fonts;
+	Common::SharedPtr<Object> _allObjects[100000];
 
 private:
 	int _roomId = START_ROOMID;
diff --git a/engines/twp/room.cpp b/engines/twp/room.cpp
index 14f8dadff45..b92a8f574e9 100644
--- a/engines/twp/room.cpp
+++ b/engines/twp/room.cpp
@@ -161,7 +161,9 @@ Common::SharedPtr<Object> Room::createObject(const Common::String &sheet, const
 	sq_pop(v, 1);
 
 	// assign an id
-	setId(obj->_table, g_twp->_resManager->newObjId());
+	const int id = g_twp->_resManager->newObjId();
+	setId(obj->_table, id);
+	g_twp->_resManager->_allObjects[id] = obj;
 	Common::String name = frames.size() > 0 ? frames[0] : "noname";
 	sqsetf(obj->_table, "name", name);
 	obj->_key = name;
@@ -200,7 +202,9 @@ Common::SharedPtr<Object> Room::createTextObject(const Common::String &fontName,
 	sq_pop(v, 1);
 
 	// assign an id
-	setId(obj->_table, g_twp->_resManager->newObjId());
+	const int id = g_twp->_resManager->newObjId();
+	setId(obj->_table, id);
+	g_twp->_resManager->_allObjects[id] = obj;
 	debugC(kDebugGame, "Create object with new table: %s #%d", obj->_name.c_str(), obj->getId());
 	obj->_name = Common::String::format("text#%d: %s", obj->getId(), text.c_str());
 
@@ -311,7 +315,9 @@ void Room::load(Common::SharedPtr<Room> room, Common::SeekableReadStream &s) {
 		for (auto it = jobjects.begin(); it != jobjects.end(); it++) {
 			const Common::JSONObject &jObject = (*it)->asObject();
 			Common::SharedPtr<Object> obj(new Object());
-			Twp::setId(obj->_table, g_twp->_resManager->newObjId());
+			const int id = g_twp->_resManager->newObjId();
+			Twp::setId(obj->_table, id);
+			g_twp->_resManager->_allObjects[id] = obj;
 			obj->_key = jObject["name"]->asString();
 			obj->_node->setName(obj->_key.c_str());
 			obj->_node->setPos(Math::Vector2d(parseVec2(jObject["pos"]->asString())));
diff --git a/engines/twp/squtil.cpp b/engines/twp/squtil.cpp
index 77f0a17651e..e959028d57a 100644
--- a/engines/twp/squtil.cpp
+++ b/engines/twp/squtil.cpp
@@ -22,9 +22,9 @@
 #include "twp/detection.h"
 #include "twp/lighting.h"
 #include "twp/object.h"
+#include "twp/resmanager.h"
 #include "twp/room.h"
 #include "twp/squtil.h"
-#include "twp/thread.h"
 #include "twp/squirrel/squirrel.h"
 #include "twp/squirrel/sqvm.h"
 #include "twp/squirrel/sqstring.h"
@@ -33,6 +33,7 @@
 #include "twp/squirrel/sqstdaux.h"
 #include "twp/squirrel/sqfuncproto.h"
 #include "twp/squirrel/sqclosure.h"
+#include "twp/thread.h"
 
 namespace Twp {
 
@@ -275,24 +276,7 @@ Common::SharedPtr<Room> sqroom(HSQUIRRELVM v, int i) {
 }
 
 Common::SharedPtr<Object> sqobj(int id) {
-	for (size_t i = 0; i < g_twp->_actors.size(); i++) {
-		Common::SharedPtr<Object> actor = g_twp->_actors[i];
-		if (getId(actor->_table) == id)
-			return actor;
-	}
-
-	for (size_t i = 0; i < g_twp->_rooms.size(); i++) {
-		Common::SharedPtr<Room> room = g_twp->_rooms[i];
-		for (size_t j = 0; j < room->_layers.size(); j++) {
-			Common::SharedPtr<Layer> layer = room->_layers[j];
-			for (size_t k = 0; k < layer->_objects.size(); k++) {
-				Common::SharedPtr<Object> obj = layer->_objects[k];
-				if (getId(obj->_table) == id)
-					return obj;
-			}
-		}
-	}
-	return nullptr;
+	return g_twp->_resManager->_allObjects[id];
 }
 
 Common::SharedPtr<Object> sqobj(HSQOBJECT table) {
diff --git a/engines/twp/thread.cpp b/engines/twp/thread.cpp
index 7b2bc9ce965..8636a9b0b15 100644
--- a/engines/twp/thread.cpp
+++ b/engines/twp/thread.cpp
@@ -97,6 +97,7 @@ bool Thread::call() {
 }
 
 bool Thread::update(float elapsed) {
+	uint32 startTime = g_system->getMillis();
 	if (_paused) {
 	} else if (_waitTime > 0) {
 		_waitTime -= elapsed;
@@ -111,6 +112,7 @@ bool Thread::update(float elapsed) {
 			resume();
 		}
 	}
+	_lastUpdateTime = g_system->getMillis() - startTime;
 	return isDead();
 }
 
diff --git a/engines/twp/thread.h b/engines/twp/thread.h
index b305afb6ccc..c050529c69c 100644
--- a/engines/twp/thread.h
+++ b/engines/twp/thread.h
@@ -66,6 +66,7 @@ public:
 	int _numFrames = 0;
 	bool _paused = false;
 	bool _pauseable = false;
+	uint32 _lastUpdateTime = 0;
 
 protected:
 	int _id = 0;
diff --git a/engines/twp/twp.cpp b/engines/twp/twp.cpp
index 45eec7f36bc..d208e10fcca 100644
--- a/engines/twp/twp.cpp
+++ b/engines/twp/twp.cpp
@@ -443,6 +443,7 @@ public:
 };
 
 void TwpEngine::update(float elapsed) {
+	const uint32 startUpdateTime = _system->getMillis();
 	_time += elapsed;
 	_frameCounter++;
 
@@ -551,6 +552,7 @@ void TwpEngine::update(float elapsed) {
 
 	// update actorswitcher
 	_actorSwitcher.update(actorSwitcherSlots(), elapsed);
+	const uint32 endMiscTime = _system->getMillis();
 
 	// update cutscene
 	if (_cutscene) {
@@ -558,6 +560,7 @@ void TwpEngine::update(float elapsed) {
 			_cutscene.reset();
 		}
 	}
+	const uint32 endUpdateCutsceneTime = _system->getMillis();
 
 	// update threads: make a copy of the threads because during threads update, new threads can be added
 	Common::Array<Common::SharedPtr<ThreadBase> > threads(_threads);
@@ -570,7 +573,6 @@ void TwpEngine::update(float elapsed) {
 			threadsToRemove.push_back(thread);
 		}
 	}
-
 	// remove threads that are terminated
 	for (auto it = threadsToRemove.begin(); it != threadsToRemove.end(); it++) {
 		Common::SharedPtr<ThreadBase> thread(*it);
@@ -579,6 +581,7 @@ void TwpEngine::update(float elapsed) {
 			_threads.remove_at(i);
 		}
 	}
+	const uint32 endUpdateThreadTime = _system->getMillis();
 
 	// update callbacks
 	for (auto it = _callbacks.begin(); it != _callbacks.end();) {
@@ -590,6 +593,7 @@ void TwpEngine::update(float elapsed) {
 		it++;
 	}
 
+	const uint32 endUpdateCallbacksTime = _system->getMillis();
 	// update tasks
 	Common::Array<Common::SharedPtr<Task> > tasks(_tasks);
 	Common::Array<Common::SharedPtr<Task> > tasksToRemove;
@@ -609,11 +613,13 @@ void TwpEngine::update(float elapsed) {
 			_tasks.remove_at(i);
 		}
 	}
+	const uint32 endUpdateTasksTimes = _system->getMillis();
 
 	// update objects
 	if (_room) {
 		_room->update(elapsed);
 	}
+	const uint32 endUpdateTimeRoom = _system->getMillis();
 
 	// update inventory
 	const bool hudActive = (_room->_fullscreen == FULLSCREENROOM && (scrPos.getY() < 180.f));
@@ -628,6 +634,14 @@ void TwpEngine::update(float elapsed) {
 	}
 
 	updateTriggers();
+	const uint32 endUpdateTime = _system->getMillis();
+	_stats.totalUpdateTime = endUpdateTime - startUpdateTime;
+	_stats.updateRoomTime = endUpdateTimeRoom - endUpdateTasksTimes;
+	_stats.updateTasksTime = endUpdateTasksTimes - endUpdateCallbacksTime;
+	_stats.updateMiscTime = endMiscTime - startUpdateTime;
+	_stats.updateCutsceneTime = endUpdateCutsceneTime - endMiscTime;
+	_stats.updateThreadsTime = endUpdateThreadTime - endUpdateCutsceneTime;
+	_stats.updateCallbacksTime = endUpdateCallbacksTime - endUpdateThreadTime;
 }
 
 void TwpEngine::setShaderEffect(RoomEffect effect) {
@@ -1011,7 +1025,9 @@ Common::Error TwpEngine::run() {
 		time = newTime;
 		update(_speed * delta / 1000.f);
 
+		const uint32 startDrawTime = _system->getMillis();
 		draw();
+		_stats.drawTime = _system->getMillis() - startDrawTime;
 		_cursor.update();
 
 		// Delay for a bit. All events loops should have a delay
@@ -1090,7 +1106,9 @@ static void onGetPairs(const Common::String &k, HSQOBJECT &oTable, void *data) {
 			if (!sqrawexists(oTable, "flags"))
 				sqsetf(oTable, "flags", 0);
 			Common::SharedPtr<Object> obj(new Object(oTable, k));
-			setId(obj->_table, g_twp->_resManager->newObjId());
+			const int id = g_twp->_resManager->newObjId();
+			setId(obj->_table, id);
+			g_twp->_resManager->_allObjects[id] = obj;
 			obj->_node = Common::SharedPtr<Node>(new Node(k));
 			obj->_nodeAnim = Common::SharedPtr<Anim>(new Anim(obj.get()));
 			obj->_node->addChild(obj->_nodeAnim.get());
@@ -1112,7 +1130,9 @@ static void onGetPairs(const Common::String &k, HSQOBJECT &oTable, void *data) {
 			}
 
 			sqgetf(params->room->_table, k, obj->_table);
-			setId(obj->_table, g_twp->_resManager->newObjId());
+			const int id = g_twp->_resManager->newObjId();
+			setId(obj->_table, id);
+			g_twp->_resManager->_allObjects[id] = obj;
 			debugC(kDebugGame, "Create object: %s #%d", k.c_str(), obj->getId());
 
 			// add it to the root table if not a pseudo room
@@ -1179,7 +1199,9 @@ Common::SharedPtr<Room> TwpEngine::defineRoom(const Common::String &name, HSQOBJ
 					sq_pop(v, 1);
 
 					// assign an id
-					setId(obj->_table, g_twp->_resManager->newObjId());
+					const int id = _resManager->newObjId();
+					setId(obj->_table, id);
+					_resManager->_allObjects[id] = obj;
 					// info fmt"Create object with new table: {obj.name} #{obj.id}"
 
 					// adds the object to the room table
diff --git a/engines/twp/twp.h b/engines/twp/twp.h
index 0e2381e5b94..58426b5174b 100644
--- a/engines/twp/twp.h
+++ b/engines/twp/twp.h
@@ -232,6 +232,17 @@ public:
 		bool isLeftDown() { return !oldLeftDown && leftDown; }
 		bool isRightDown() { return !oldRightDown && rightDown; }
 	} _cursor;
+
+	struct Stats {
+		uint32 totalUpdateTime = 0;
+		uint32 updateRoomTime = 0;
+		uint32 updateTasksTime = 0;
+		uint32 updateMiscTime = 0;
+		uint32 updateCutsceneTime = 0;
+		uint32 updateThreadsTime = 0;
+		uint32 updateCallbacksTime = 0;
+		uint32 drawTime = 0;
+	} _stats;
 	unique_ptr<Hud> _hud;
 	Inventory _uiInv;
 	ActorSwitcher _actorSwitcher;




More information about the Scummvm-git-logs mailing list