Compare commits
	
		
			1 Commits
		
	
	
		
			c7ae6490cc
			...
			tracypatch
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f784f91798 | 
							
								
								
									
										2
									
								
								external/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								external/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +1,7 @@ | |||||||
| cmake_minimum_required(VERSION 3.9 FATAL_ERROR) | cmake_minimum_required(VERSION 3.9 FATAL_ERROR) | ||||||
|  |  | ||||||
|  | add_subdirectory(./tracy) | ||||||
|  |  | ||||||
| add_subdirectory(./entt) | add_subdirectory(./entt) | ||||||
|  |  | ||||||
| add_subdirectory(./solanaceae_util) | add_subdirectory(./solanaceae_util) | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								external/solanaceae_message3
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								external/solanaceae_message3
									
									
									
									
										vendored
									
									
								
							 Submodule external/solanaceae_message3 updated: e6f4f18f00...7c28b232a4
									
								
							
							
								
								
									
										5
									
								
								external/toxcore/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								external/toxcore/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							| @@ -171,9 +171,10 @@ configure_file( | |||||||
| target_include_directories(toxcore PRIVATE "${TOX_DIR}toxcore") | target_include_directories(toxcore PRIVATE "${TOX_DIR}toxcore") | ||||||
| target_include_directories(toxcore PUBLIC "${TOX_DIR}") | target_include_directories(toxcore PUBLIC "${TOX_DIR}") | ||||||
|  |  | ||||||
| target_compile_definitions(toxcore PUBLIC USE_IPV6=1) | #target_compile_definitions(toxcore PUBLIC USE_IPV6=1) | ||||||
| #target_compile_definitions(toxcore PUBLIC MIN_LOGGER_LEVEL=LOGGER_LEVEL_DEBUG) | #target_compile_definitions(toxcore PUBLIC MIN_LOGGER_LEVEL=LOGGER_LEVEL_DEBUG) | ||||||
| target_compile_definitions(toxcore PUBLIC MIN_LOGGER_LEVEL=LOGGER_LEVEL_INFO) | #target_compile_definitions(toxcore PUBLIC MIN_LOGGER_LEVEL=LOGGER_LEVEL_INFO) | ||||||
|  | target_compile_definitions(toxcore PUBLIC MIN_LOGGER_LEVEL=LOGGER_LEVEL_TRACE) | ||||||
|  |  | ||||||
| find_package(unofficial-sodium CONFIG QUIET) | find_package(unofficial-sodium CONFIG QUIET) | ||||||
| find_package(sodium QUIET) | find_package(sodium QUIET) | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								external/tracy/CMakeLists.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								external/tracy/CMakeLists.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | cmake_minimum_required(VERSION 3.24 FATAL_ERROR) | ||||||
|  |  | ||||||
|  | include(FetchContent) | ||||||
|  |  | ||||||
|  | if (NOT TARGET TracyClient) | ||||||
|  | 	FetchContent_Declare(tracy | ||||||
|  | 		GIT_REPOSITORY https://github.com/wolfpld/tracy.git | ||||||
|  | 		GIT_TAG v0.10 | ||||||
|  | 	) | ||||||
|  | 	FetchContent_MakeAvailable(tracy) | ||||||
|  | endif() | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								flake.nix
									
									
									
									
									
								
							| @@ -12,6 +12,14 @@ | |||||||
|     flake-utils.lib.eachDefaultSystem (system: |     flake-utils.lib.eachDefaultSystem (system: | ||||||
|     let |     let | ||||||
|       pkgs = import nixpkgs { inherit system; }; |       pkgs = import nixpkgs { inherit system; }; | ||||||
|  |  | ||||||
|  |       # get deps (move to lockfile or something) | ||||||
|  |       # TODO: use system provided instead | ||||||
|  |       tracy-src = pkgs.fetchFromGitHub { | ||||||
|  |         owner = "wolfpld"; repo = "tracy"; | ||||||
|  |         rev = "v0.10"; | ||||||
|  |         hash = "sha256-DN1ExvQ5wcIUyhMAfiakFbZkDsx+5l8VMtYGvSdboPA="; | ||||||
|  |       }; | ||||||
|     in { |     in { | ||||||
|       packages.default = pkgs.stdenv.mkDerivation { |       packages.default = pkgs.stdenv.mkDerivation { | ||||||
|         pname = "tomato"; |         pname = "tomato"; | ||||||
| @@ -56,8 +64,11 @@ | |||||||
|         ] ++ self.packages.${system}.default.dlopenBuildInputs; |         ] ++ self.packages.${system}.default.dlopenBuildInputs; | ||||||
|  |  | ||||||
|         cmakeFlags = [ |         cmakeFlags = [ | ||||||
|           "TOMATO_ASAN=1" |           "-DTOMATO_ASAN=OFF" | ||||||
|           "CMAKE_BUILD_TYPE=RelWithDebInfo" |           "-DCMAKE_BUILD_TYPE=RelWithDebInfo" | ||||||
|  |  | ||||||
|  |           "-DTRACY_ENABLE=ON" | ||||||
|  |           "-DFETCHCONTENT_SOURCE_DIR_TRACY=${tracy-src}" | ||||||
|         ]; |         ]; | ||||||
|  |  | ||||||
|         # TODO: replace with install command |         # TODO: replace with install command | ||||||
|   | |||||||
| @@ -82,6 +82,8 @@ target_link_libraries(tomato PUBLIC | |||||||
| 	solanaceae_tox_contacts | 	solanaceae_tox_contacts | ||||||
| 	solanaceae_tox_messages | 	solanaceae_tox_messages | ||||||
|  |  | ||||||
|  | 	TracyClient | ||||||
|  |  | ||||||
| 	SDL3::SDL3 | 	SDL3::SDL3 | ||||||
|  |  | ||||||
| 	imgui | 	imgui | ||||||
|   | |||||||
| @@ -2,6 +2,8 @@ | |||||||
|  |  | ||||||
| #include "./file_selector.hpp" | #include "./file_selector.hpp" | ||||||
|  |  | ||||||
|  | #include <tracy/Tracy.hpp> | ||||||
|  |  | ||||||
| #include <solanaceae/message3/components.hpp> | #include <solanaceae/message3/components.hpp> | ||||||
| #include <solanaceae/tox_messages/components.hpp> | #include <solanaceae/tox_messages/components.hpp> | ||||||
| #include <solanaceae/contact/components.hpp> | #include <solanaceae/contact/components.hpp> | ||||||
| @@ -149,6 +151,7 @@ ChatGui4::~ChatGui4(void) { | |||||||
| } | } | ||||||
|  |  | ||||||
| float ChatGui4::render(float time_delta) { | float ChatGui4::render(float time_delta) { | ||||||
|  | 	ZoneScoped; | ||||||
| 	_fss.render(); | 	_fss.render(); | ||||||
| 	_sip.render(time_delta); | 	_sip.render(time_delta); | ||||||
|  |  | ||||||
| @@ -338,6 +341,7 @@ float ChatGui4::render(float time_delta) { | |||||||
| 						Components::ConvertedTimeCache prev_time {}; | 						Components::ConvertedTimeCache prev_time {}; | ||||||
| 						auto tmp_view = msg_reg.view<Message::Components::Timestamp>(); | 						auto tmp_view = msg_reg.view<Message::Components::Timestamp>(); | ||||||
| 						for (auto view_it = tmp_view.rbegin(), view_last = tmp_view.rend(); view_it != view_last; view_it++) { | 						for (auto view_it = tmp_view.rbegin(), view_last = tmp_view.rend(); view_it != view_last; view_it++) { | ||||||
|  | 							ZoneScoped; | ||||||
| 							const Message3 e = *view_it; | 							const Message3 e = *view_it; | ||||||
|  |  | ||||||
| 							// manually filter ("reverse" iteration <.<) | 							// manually filter ("reverse" iteration <.<) | ||||||
| @@ -677,6 +681,7 @@ void ChatGui4::sendFilePath(const char* file_path) { | |||||||
|  |  | ||||||
| // has MessageText | // has MessageText | ||||||
| void ChatGui4::renderMessageBodyText(Message3Registry& reg, const Message3 e) { | void ChatGui4::renderMessageBodyText(Message3Registry& reg, const Message3 e) { | ||||||
|  | 	ZoneScoped; | ||||||
| 	const auto& msgtext = reg.get<Message::Components::MessageText>(e).text; | 	const auto& msgtext = reg.get<Message::Components::MessageText>(e).text; | ||||||
|  |  | ||||||
| 	// TODO: set word wrap | 	// TODO: set word wrap | ||||||
| @@ -719,6 +724,7 @@ void ChatGui4::renderMessageBodyText(Message3Registry& reg, const Message3 e) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void ChatGui4::renderMessageBodyFile(Message3Registry& reg, const Message3 e) { | void ChatGui4::renderMessageBodyFile(Message3Registry& reg, const Message3 e) { | ||||||
|  | 	ZoneScoped; | ||||||
| 	if ( | 	if ( | ||||||
| 		!_show_chat_avatar_tf | 		!_show_chat_avatar_tf | ||||||
| 		&& ( | 		&& ( | ||||||
| @@ -978,6 +984,7 @@ void ChatGui4::renderMessageExtra(Message3Registry& reg, const Message3 e) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void ChatGui4::renderContactList(void) { | void ChatGui4::renderContactList(void) { | ||||||
|  | 	ZoneScoped; | ||||||
| 	if (ImGui::BeginChild("contacts", {TEXT_BASE_WIDTH*35, 0})) { | 	if (ImGui::BeginChild("contacts", {TEXT_BASE_WIDTH*35, 0})) { | ||||||
| 		//for (const auto& c : _cm.getBigContacts()) { | 		//for (const auto& c : _cm.getBigContacts()) { | ||||||
| 		for (const auto& c : _cr.view<Contact::Components::TagBig>()) { | 		for (const auto& c : _cr.view<Contact::Components::TagBig>()) { | ||||||
| @@ -1138,6 +1145,7 @@ bool ChatGui4::renderSubContactListContact(const Contact3 c, const bool selected | |||||||
| } | } | ||||||
|  |  | ||||||
| void ChatGui4::pasteFile(const char* mime_type) { | void ChatGui4::pasteFile(const char* mime_type) { | ||||||
|  | 	ZoneScoped; | ||||||
| 	size_t data_size = 0; | 	size_t data_size = 0; | ||||||
| 	void* data = SDL_GetClipboardData(mime_type, &data_size); | 	void* data = SDL_GetClipboardData(mime_type, &data_size); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/main.cpp
									
									
									
									
									
								
							| @@ -1,6 +1,8 @@ | |||||||
| #include <SDL3/SDL.h> | #include <SDL3/SDL.h> | ||||||
| #include <SDL3/SDL_main.h> | #include <SDL3/SDL_main.h> | ||||||
|  |  | ||||||
|  | #include <tracy/Tracy.hpp> | ||||||
|  |  | ||||||
| #include <imgui/imgui.h> | #include <imgui/imgui.h> | ||||||
| #include <imgui/backends/imgui_impl_sdl3.h> | #include <imgui/backends/imgui_impl_sdl3.h> | ||||||
| #include <imgui/backends/imgui_impl_sdlrenderer3.h> | #include <imgui/backends/imgui_impl_sdlrenderer3.h> | ||||||
| @@ -90,6 +92,7 @@ int main(int argc, char** argv) { | |||||||
|  |  | ||||||
| 	bool quit = false; | 	bool quit = false; | ||||||
| 	while (!quit) { | 	while (!quit) { | ||||||
|  | 		ZoneScopedN("tomato::mainloop"); | ||||||
| 		auto new_time = std::chrono::steady_clock::now(); | 		auto new_time = std::chrono::steady_clock::now(); | ||||||
|  |  | ||||||
| 		const float time_delta_tick = std::chrono::duration<float, std::chrono::seconds::period>(new_time - last_time_tick).count(); | 		const float time_delta_tick = std::chrono::duration<float, std::chrono::seconds::period>(new_time - last_time_tick).count(); | ||||||
| @@ -99,7 +102,10 @@ int main(int argc, char** argv) { | |||||||
| 		bool render = time_delta_render >= screen->nextRender(); | 		bool render = time_delta_render >= screen->nextRender(); | ||||||
|  |  | ||||||
| 		if (tick) { | 		if (tick) { | ||||||
|  | 			ZoneScopedN("tomato::tick"); | ||||||
|  | 			FrameMarkStart("tomato::tick"); | ||||||
| 			Screen* ret_screen = screen->tick(time_delta_tick, quit); | 			Screen* ret_screen = screen->tick(time_delta_tick, quit); | ||||||
|  | 			FrameMarkEnd("tomato::tick"); | ||||||
| 			if (ret_screen != nullptr) { | 			if (ret_screen != nullptr) { | ||||||
| 				screen.reset(ret_screen); | 				screen.reset(ret_screen); | ||||||
| 			} | 			} | ||||||
| @@ -126,6 +132,8 @@ int main(int argc, char** argv) { | |||||||
|  |  | ||||||
| 		// can do both in the same loop | 		// can do both in the same loop | ||||||
| 		if (render) { | 		if (render) { | ||||||
|  | 			ZoneScopedN("tomato::render"); | ||||||
|  | 			FrameMarkStart("tomato::render"); | ||||||
| 			ImGui_ImplSDLRenderer3_NewFrame(); | 			ImGui_ImplSDLRenderer3_NewFrame(); | ||||||
| 			ImGui_ImplSDL3_NewFrame(); | 			ImGui_ImplSDL3_NewFrame(); | ||||||
| 			ImGui::NewFrame(); | 			ImGui::NewFrame(); | ||||||
| @@ -141,9 +149,11 @@ int main(int argc, char** argv) { | |||||||
| 			ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData()); | 			ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData()); | ||||||
|  |  | ||||||
| 			SDL_RenderPresent(renderer.get()); | 			SDL_RenderPresent(renderer.get()); | ||||||
|  | 			FrameMark; | ||||||
| 			// clearing after present is (should) more performant, but first frame is a mess | 			// clearing after present is (should) more performant, but first frame is a mess | ||||||
| 			SDL_SetRenderDrawColor(renderer.get(), 0x10, 0x10, 0x10, SDL_ALPHA_OPAQUE); | 			SDL_SetRenderDrawColor(renderer.get(), 0x10, 0x10, 0x10, SDL_ALPHA_OPAQUE); | ||||||
| 			SDL_RenderClear(renderer.get()); | 			SDL_RenderClear(renderer.get()); | ||||||
|  | 			FrameMarkEnd("tomato::render"); | ||||||
|  |  | ||||||
| 			last_time_render = new_time; | 			last_time_render = new_time; | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -1,5 +1,7 @@ | |||||||
| #include "./main_screen.hpp" | #include "./main_screen.hpp" | ||||||
|  |  | ||||||
|  | #include <tracy/Tracy.hpp> | ||||||
|  |  | ||||||
| #include <solanaceae/contact/components.hpp> | #include <solanaceae/contact/components.hpp> | ||||||
|  |  | ||||||
| #include <imgui/imgui.h> | #include <imgui/imgui.h> | ||||||
| @@ -155,6 +157,7 @@ bool MainScreen::handleEvent(SDL_Event& e) { | |||||||
| } | } | ||||||
|  |  | ||||||
| Screen* MainScreen::render(float time_delta, bool&) { | Screen* MainScreen::render(float time_delta, bool&) { | ||||||
|  | 	ZoneScoped; | ||||||
| 	// HACK: render the tomato main window first, with proper flags set. | 	// HACK: render the tomato main window first, with proper flags set. | ||||||
| 	// flags need to be set the first time begin() is called. | 	// flags need to be set the first time begin() is called. | ||||||
| 	// and plugins are run before the main cg is run. | 	// and plugins are run before the main cg is run. | ||||||
| @@ -403,6 +406,7 @@ Screen* MainScreen::render(float time_delta, bool&) { | |||||||
| } | } | ||||||
|  |  | ||||||
| Screen* MainScreen::tick(float time_delta, bool& quit) { | Screen* MainScreen::tick(float time_delta, bool& quit) { | ||||||
|  | 	ZoneScoped; | ||||||
| 	quit = !tc.iterate(time_delta); // compute | 	quit = !tc.iterate(time_delta); // compute | ||||||
|  |  | ||||||
| 	tcm.iterate(time_delta); // compute | 	tcm.iterate(time_delta); // compute | ||||||
|   | |||||||
| @@ -1,4 +1,12 @@ | |||||||
| #include "./tox_client.hpp" | #include "./tox_client.hpp" | ||||||
|  | #include "toxcore/tox.h" | ||||||
|  |  | ||||||
|  | // experimental | ||||||
|  | #include <cstdint> | ||||||
|  | #include <toxcore/tox_private.h> | ||||||
|  | #include <toxcore/mem.h> | ||||||
|  |  | ||||||
|  | #include <tracy/Tracy.hpp> | ||||||
|  |  | ||||||
| // meh, change this | // meh, change this | ||||||
| #include <exception> | #include <exception> | ||||||
| @@ -67,6 +75,52 @@ ToxClient::ToxClient(std::string_view save_path, std::string_view save_password) | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | #if 1 | ||||||
|  | 	// experimental tracy alloc tracking | ||||||
|  | 	static Tox_System g_mysystem = tox_default_system(); | ||||||
|  | 	static const Memory* g_systemmemory = os_memory(); | ||||||
|  | 	static Memory_Funcs g_mymemoryfuncs { | ||||||
|  | 		+[](void* obj, uint32_t size) { | ||||||
|  | 			auto ret = g_systemmemory->funcs->malloc(g_systemmemory->obj, size); | ||||||
|  | 			TracyAllocNS(ret, size, 32, "tox"); | ||||||
|  | 			return ret; | ||||||
|  | 		}, | ||||||
|  | 		+[](void* obj, uint32_t nmemb, uint32_t size) { | ||||||
|  | 			auto ret = g_systemmemory->funcs->calloc(g_systemmemory->obj, nmemb, size); | ||||||
|  | 			TracyAllocNS(ret, nmemb*size, 32, "tox"); | ||||||
|  | 			return ret; | ||||||
|  | 		}, | ||||||
|  | 		+[](void* obj, void* ptr, uint32_t size) { | ||||||
|  | 			TracyFreeNS(ptr, 32, "tox"); | ||||||
|  | 			auto ret = g_systemmemory->funcs->realloc(g_systemmemory->obj, ptr, size); | ||||||
|  | 			TracyAllocNS(ret, size, 32, "tox"); | ||||||
|  | 			return ret; | ||||||
|  | 		}, | ||||||
|  | 		+[](void* obj, void* ptr) { | ||||||
|  | 			TracyFreeNS(ptr, 32, "tox"); | ||||||
|  | 			g_systemmemory->funcs->free(g_systemmemory->obj, ptr); | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  | 	static Memory g_mymemory { | ||||||
|  | 		&g_mymemoryfuncs, | ||||||
|  | 		nullptr | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	g_mysystem.mem = &g_mymemory; | ||||||
|  |  | ||||||
|  | 	tox_options_set_operating_system(options, &g_mysystem); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	tox_options_set_log_callback(options, +[](Tox*, Tox_Log_Level level, const char*, uint32_t, const char*, const char* message, void*) { | ||||||
|  | 		std::string tmp_str; | ||||||
|  | 		tmp_str += "["; | ||||||
|  | 		tmp_str += tox_log_level_to_string(level); | ||||||
|  | 		tmp_str += "] "; | ||||||
|  | 		tmp_str += message; | ||||||
|  | 		TracyMessageS(tmp_str.c_str(), tmp_str.size(), 32); | ||||||
|  | 	}); | ||||||
|  | #endif | ||||||
|  |  | ||||||
| 	tox_options_set_experimental_groups_persistence(options, true); | 	tox_options_set_experimental_groups_persistence(options, true); | ||||||
|  |  | ||||||
| 	TOX_ERR_NEW err_new; | 	TOX_ERR_NEW err_new; | ||||||
| @@ -127,6 +181,7 @@ ToxClient::~ToxClient(void) { | |||||||
| } | } | ||||||
|  |  | ||||||
| bool ToxClient::iterate(float time_delta) { | bool ToxClient::iterate(float time_delta) { | ||||||
|  | 	ZoneScoped; | ||||||
| 	Tox_Err_Events_Iterate err_e_it = TOX_ERR_EVENTS_ITERATE_OK; | 	Tox_Err_Events_Iterate err_e_it = TOX_ERR_EVENTS_ITERATE_OK; | ||||||
| 	auto* events = tox_events_iterate(_tox, false, &err_e_it); | 	auto* events = tox_events_iterate(_tox, false, &err_e_it); | ||||||
| 	if (err_e_it == TOX_ERR_EVENTS_ITERATE_OK && events != nullptr) { | 	if (err_e_it == TOX_ERR_EVENTS_ITERATE_OK && events != nullptr) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user