diff options
Diffstat (limited to 'editor')
-rw-r--r-- | editor/editor_node.cpp | 21 | ||||
-rw-r--r-- | editor/editor_node.h | 2 | ||||
-rw-r--r-- | editor/editor_resource_preview.cpp | 129 | ||||
-rw-r--r-- | editor/editor_resource_preview.h | 2 | ||||
-rw-r--r-- | editor/fileserver/editor_file_server.cpp | 17 | ||||
-rw-r--r-- | editor/fileserver/editor_file_server.h | 2 | ||||
-rw-r--r-- | editor/import/resource_importer_texture.cpp | 95 | ||||
-rw-r--r-- | editor/import/resource_importer_texture.h | 2 |
8 files changed, 130 insertions, 140 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 9cc6134f27..e889298aa3 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -5554,7 +5554,7 @@ void EditorNode::_print_handler(void *p_this, const String &p_string, bool p_err static void _execute_thread(void *p_ud) { EditorNode::ExecuteThreadArgs *eta = (EditorNode::ExecuteThreadArgs *)p_ud; - Error err = OS::get_singleton()->execute(eta->path, eta->args, true, NULL, &eta->output, &eta->exitcode, true, eta->execute_output_mutex); + Error err = OS::get_singleton()->execute(eta->path, eta->args, true, NULL, &eta->output, &eta->exitcode, true, &eta->execute_output_mutex); print_verbose("Thread exit status: " + itos(eta->exitcode)); if (err != OK) { eta->exitcode = err; @@ -5574,7 +5574,6 @@ int EditorNode::execute_and_show_output(const String &p_title, const String &p_p ExecuteThreadArgs eta; eta.path = p_path; eta.args = p_arguments; - eta.execute_output_mutex = Mutex::create(); eta.exitcode = 255; eta.done = false; @@ -5585,20 +5584,20 @@ int EditorNode::execute_and_show_output(const String &p_title, const String &p_p ERR_FAIL_COND_V(!eta.execute_output_thread, 0); while (!eta.done) { - eta.execute_output_mutex->lock(); - if (prev_len != eta.output.length()) { - String to_add = eta.output.substr(prev_len, eta.output.length()); - prev_len = eta.output.length(); - execute_outputs->add_text(to_add); - Main::iteration(); - } - eta.execute_output_mutex->unlock(); + { + MutexLock lock(eta.execute_output_mutex); + if (prev_len != eta.output.length()) { + String to_add = eta.output.substr(prev_len, eta.output.length()); + prev_len = eta.output.length(); + execute_outputs->add_text(to_add); + Main::iteration(); + } + } OS::get_singleton()->delay_usec(1000); } Thread::wait_to_finish(eta.execute_output_thread); memdelete(eta.execute_output_thread); - memdelete(eta.execute_output_mutex); execute_outputs->add_text("\nExit Code: " + itos(eta.exitcode)); if (p_close_on_errors && eta.exitcode != 0) { diff --git a/editor/editor_node.h b/editor/editor_node.h index a982b9d85f..0b3de5c142 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -107,7 +107,7 @@ public: List<String> args; String output; Thread *execute_output_thread; - Mutex *execute_output_mutex; + Mutex execute_output_mutex; int exitcode; volatile bool done; }; diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp index c0f58c9aae..40482dc367 100644 --- a/editor/editor_resource_preview.cpp +++ b/editor/editor_resource_preview.cpp @@ -109,29 +109,28 @@ void EditorResourcePreview::_thread_func(void *ud) { void EditorResourcePreview::_preview_ready(const String &p_str, const Ref<Texture2D> &p_texture, const Ref<Texture2D> &p_small_texture, ObjectID id, const StringName &p_func, const Variant &p_ud) { - preview_mutex->lock(); - + MutexLock lock(preview_mutex); String path = p_str; - uint32_t hash = 0; - uint64_t modified_time = 0; - - if (p_str.begins_with("ID:")) { - hash = uint32_t(p_str.get_slicec(':', 2).to_int64()); - path = "ID:" + p_str.get_slicec(':', 1); - } else { - modified_time = FileAccess::get_modified_time(path); - } + { + uint32_t hash = 0; + uint64_t modified_time = 0; - Item item; - item.order = order++; - item.preview = p_texture; - item.small_preview = p_small_texture; - item.last_hash = hash; - item.modified_time = modified_time; + if (p_str.begins_with("ID:")) { + hash = uint32_t(p_str.get_slicec(':', 2).to_int64()); + path = "ID:" + p_str.get_slicec(':', 1); + } else { + modified_time = FileAccess::get_modified_time(path); + } - cache[path] = item; + Item item; + item.order = order++; + item.preview = p_texture; + item.small_preview = p_small_texture; + item.last_hash = hash; + item.modified_time = modified_time; - preview_mutex->unlock(); + cache[path] = item; + } MessageQueue::get_singleton()->push_call(id, p_func, path, p_texture, p_small_texture, p_ud); } @@ -219,7 +218,7 @@ void EditorResourcePreview::_thread() { while (!exit) { preview_sem->wait(); - preview_mutex->lock(); + preview_mutex.lock(); if (queue.size()) { @@ -235,10 +234,10 @@ void EditorResourcePreview::_thread() { _preview_ready(path, cache[item.path].preview, cache[item.path].small_preview, item.id, item.function, item.userdata); - preview_mutex->unlock(); + preview_mutex.unlock(); } else { - preview_mutex->unlock(); + preview_mutex.unlock(); Ref<ImageTexture> texture; Ref<ImageTexture> small_texture; @@ -345,7 +344,7 @@ void EditorResourcePreview::_thread() { } } else { - preview_mutex->unlock(); + preview_mutex.unlock(); } } exited = true; @@ -356,51 +355,54 @@ void EditorResourcePreview::queue_edited_resource_preview(const Ref<Resource> &p ERR_FAIL_NULL(p_receiver); ERR_FAIL_COND(!p_res.is_valid()); - preview_mutex->lock(); + { + MutexLock lock(preview_mutex); - String path_id = "ID:" + itos(p_res->get_instance_id()); + String path_id = "ID:" + itos(p_res->get_instance_id()); - if (cache.has(path_id) && cache[path_id].last_hash == p_res->hash_edited_version()) { + if (cache.has(path_id) && cache[path_id].last_hash == p_res->hash_edited_version()) { - cache[path_id].order = order++; - p_receiver->call(p_receiver_func, path_id, cache[path_id].preview, cache[path_id].small_preview, p_userdata); - preview_mutex->unlock(); - return; - } + cache[path_id].order = order++; + p_receiver->call(p_receiver_func, path_id, cache[path_id].preview, cache[path_id].small_preview, p_userdata); + preview_mutex.unlock(); + return; + } - cache.erase(path_id); //erase if exists, since it will be regen + cache.erase(path_id); //erase if exists, since it will be regen - QueueItem item; - item.function = p_receiver_func; - item.id = p_receiver->get_instance_id(); - item.resource = p_res; - item.path = path_id; - item.userdata = p_userdata; + QueueItem item; + item.function = p_receiver_func; + item.id = p_receiver->get_instance_id(); + item.resource = p_res; + item.path = path_id; + item.userdata = p_userdata; - queue.push_back(item); - preview_mutex->unlock(); + queue.push_back(item); + } preview_sem->post(); } void EditorResourcePreview::queue_resource_preview(const String &p_path, Object *p_receiver, const StringName &p_receiver_func, const Variant &p_userdata) { ERR_FAIL_NULL(p_receiver); - preview_mutex->lock(); - if (cache.has(p_path)) { - cache[p_path].order = order++; - p_receiver->call(p_receiver_func, p_path, cache[p_path].preview, cache[p_path].small_preview, p_userdata); - preview_mutex->unlock(); - return; - } + { + MutexLock lock(preview_mutex); + + if (cache.has(p_path)) { + cache[p_path].order = order++; + p_receiver->call(p_receiver_func, p_path, cache[p_path].preview, cache[p_path].small_preview, p_userdata); + preview_mutex.unlock(); + return; + } - QueueItem item; - item.function = p_receiver_func; - item.id = p_receiver->get_instance_id(); - item.path = p_path; - item.userdata = p_userdata; + QueueItem item; + item.function = p_receiver_func; + item.id = p_receiver->get_instance_id(); + item.path = p_path; + item.userdata = p_userdata; - queue.push_back(item); - preview_mutex->unlock(); + queue.push_back(item); + } preview_sem->post(); } @@ -434,20 +436,19 @@ void EditorResourcePreview::_bind_methods() { void EditorResourcePreview::check_for_invalidation(const String &p_path) { - preview_mutex->lock(); - + MutexLock lock(preview_mutex); bool call_invalidated = false; - if (cache.has(p_path)) { + { + if (cache.has(p_path)) { - uint64_t modified_time = FileAccess::get_modified_time(p_path); - if (modified_time != cache[p_path].modified_time) { - cache.erase(p_path); - call_invalidated = true; + uint64_t modified_time = FileAccess::get_modified_time(p_path); + if (modified_time != cache[p_path].modified_time) { + cache.erase(p_path); + call_invalidated = true; + } } } - preview_mutex->unlock(); - if (call_invalidated) { //do outside mutex call_deferred("emit_signal", "preview_invalidated", p_path); } @@ -475,7 +476,6 @@ void EditorResourcePreview::stop() { EditorResourcePreview::EditorResourcePreview() { thread = NULL; singleton = this; - preview_mutex = Mutex::create(); preview_sem = SemaphoreOld::create(); order = 0; exit = false; @@ -485,6 +485,5 @@ EditorResourcePreview::EditorResourcePreview() { EditorResourcePreview::~EditorResourcePreview() { stop(); - memdelete(preview_mutex); memdelete(preview_sem); } diff --git a/editor/editor_resource_preview.h b/editor/editor_resource_preview.h index 0a89154243..ae347c0469 100644 --- a/editor/editor_resource_preview.h +++ b/editor/editor_resource_preview.h @@ -70,7 +70,7 @@ class EditorResourcePreview : public Node { List<QueueItem> queue; - Mutex *preview_mutex; + Mutex preview_mutex; SemaphoreOld *preview_sem; Thread *thread; volatile bool exit; diff --git a/editor/fileserver/editor_file_server.cpp b/editor/fileserver/editor_file_server.cpp index af7eb0c4c7..fb44c145b2 100644 --- a/editor/fileserver/editor_file_server.cpp +++ b/editor/fileserver/editor_file_server.cpp @@ -42,9 +42,10 @@ void EditorFileServer::_close_client(ClientData *cd) { cd->connection->disconnect_from_host(); - cd->efs->wait_mutex->lock(); - cd->efs->to_wait.insert(cd->thread); - cd->efs->wait_mutex->unlock(); + { + MutexLock lock(cd->efs->wait_mutex); + cd->efs->to_wait.insert(cd->thread); + } while (cd->files.size()) { memdelete(cd->files.front()->get()); cd->files.erase(cd->files.front()); @@ -295,16 +296,16 @@ void EditorFileServer::_thread_start(void *s) { } } - self->wait_mutex->lock(); + self->wait_mutex.lock(); while (self->to_wait.size()) { Thread *w = self->to_wait.front()->get(); self->to_wait.erase(w); - self->wait_mutex->unlock(); + self->wait_mutex.unlock(); Thread::wait_to_finish(w); memdelete(w); - self->wait_mutex->lock(); + self->wait_mutex.lock(); } - self->wait_mutex->unlock(); + self->wait_mutex.unlock(); OS::get_singleton()->delay_usec(100000); } @@ -331,7 +332,6 @@ void EditorFileServer::stop() { EditorFileServer::EditorFileServer() { server.instance(); - wait_mutex = Mutex::create(); quit = false; active = false; cmd = CMD_NONE; @@ -346,5 +346,4 @@ EditorFileServer::~EditorFileServer() { quit = true; Thread::wait_to_finish(thread); memdelete(thread); - memdelete(wait_mutex); } diff --git a/editor/fileserver/editor_file_server.h b/editor/fileserver/editor_file_server.h index 4ce4c0cda6..cc3cb44566 100644 --- a/editor/fileserver/editor_file_server.h +++ b/editor/fileserver/editor_file_server.h @@ -62,7 +62,7 @@ class EditorFileServer : public Object { static void _close_client(ClientData *cd); static void _subthread_start(void *s); - Mutex *wait_mutex; + Mutex wait_mutex; Thread *thread; static void _thread_start(void *); bool quit; diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp index 3254b32dae..92ecda8508 100644 --- a/editor/import/resource_importer_texture.cpp +++ b/editor/import/resource_importer_texture.cpp @@ -38,7 +38,8 @@ void ResourceImporterTexture::_texture_reimport_roughness(const Ref<StreamTexture> &p_tex, const String &p_normal_path, VS::TextureDetectRoughnessChannel p_channel) { - singleton->mutex->lock(); + MutexLock lock(singleton->mutex); + StringName path = p_tex->get_path(); if (!singleton->make_flags.has(path)) { @@ -48,13 +49,12 @@ void ResourceImporterTexture::_texture_reimport_roughness(const Ref<StreamTextur singleton->make_flags[path].flags |= MAKE_ROUGHNESS_FLAG; singleton->make_flags[path].channel_for_roughness = p_channel; singleton->make_flags[path].normal_path_for_roughness = p_normal_path; - - singleton->mutex->unlock(); } void ResourceImporterTexture::_texture_reimport_3d(const Ref<StreamTexture> &p_tex) { - singleton->mutex->lock(); + MutexLock lock(singleton->mutex); + StringName path = p_tex->get_path(); if (!singleton->make_flags.has(path)) { @@ -62,13 +62,12 @@ void ResourceImporterTexture::_texture_reimport_3d(const Ref<StreamTexture> &p_t } singleton->make_flags[path].flags |= MAKE_3D_FLAG; - - singleton->mutex->unlock(); } void ResourceImporterTexture::_texture_reimport_normal(const Ref<StreamTexture> &p_tex) { - singleton->mutex->lock(); + MutexLock lock(singleton->mutex); + StringName path = p_tex->get_path(); if (!singleton->make_flags.has(path)) { @@ -76,8 +75,6 @@ void ResourceImporterTexture::_texture_reimport_normal(const Ref<StreamTexture> } singleton->make_flags[path].flags |= MAKE_NORMAL_FLAG; - - singleton->mutex->unlock(); } void ResourceImporterTexture::update_imports() { @@ -85,57 +82,56 @@ void ResourceImporterTexture::update_imports() { if (EditorFileSystem::get_singleton()->is_scanning() || EditorFileSystem::get_singleton()->is_importing()) { return; // do nothing for now } - mutex->lock(); - - if (make_flags.empty()) { - mutex->unlock(); - return; - } + MutexLock lock(mutex); Vector<String> to_reimport; - for (Map<StringName, MakeInfo>::Element *E = make_flags.front(); E; E = E->next()) { + { + if (make_flags.empty()) { + return; + } - Ref<ConfigFile> cf; - cf.instance(); - String src_path = String(E->key()) + ".import"; + for (Map<StringName, MakeInfo>::Element *E = make_flags.front(); E; E = E->next()) { - Error err = cf->load(src_path); - ERR_CONTINUE(err != OK); + Ref<ConfigFile> cf; + cf.instance(); + String src_path = String(E->key()) + ".import"; - bool changed = false; + Error err = cf->load(src_path); + ERR_CONTINUE(err != OK); - if (E->get().flags & MAKE_NORMAL_FLAG && int(cf->get_value("params", "compress/normal_map")) == 0) { - cf->set_value("params", "compress/normal_map", 1); - changed = true; - } + bool changed = false; - if (E->get().flags & MAKE_ROUGHNESS_FLAG && int(cf->get_value("params", "roughness/mode")) == 0) { - cf->set_value("params", "roughness/mode", E->get().channel_for_roughness + 2); - cf->set_value("params", "roughness/src_normal", E->get().normal_path_for_roughness); - changed = true; - } + if (E->get().flags & MAKE_NORMAL_FLAG && int(cf->get_value("params", "compress/normal_map")) == 0) { + cf->set_value("params", "compress/normal_map", 1); + changed = true; + } - if (E->get().flags & MAKE_3D_FLAG && bool(cf->get_value("params", "detect_3d/compress_to"))) { - int compress_to = cf->get_value("params", "detect_3d/compress_to"); - cf->set_value("params", "detect_3d/compress_to", 0); - if (compress_to == 1) { - cf->set_value("params", "compress/mode", COMPRESS_VRAM_COMPRESSED); - } else if (compress_to == 2) { - cf->set_value("params", "compress/mode", COMPRESS_BASIS_UNIVERSAL); + if (E->get().flags & MAKE_ROUGHNESS_FLAG && int(cf->get_value("params", "roughness/mode")) == 0) { + cf->set_value("params", "roughness/mode", E->get().channel_for_roughness + 2); + cf->set_value("params", "roughness/src_normal", E->get().normal_path_for_roughness); + changed = true; } - cf->set_value("params", "mipmaps/generate", true); - changed = true; - } - if (changed) { - cf->save(src_path); - to_reimport.push_back(E->key()); - } - } + if (E->get().flags & MAKE_3D_FLAG && bool(cf->get_value("params", "detect_3d/compress_to"))) { + int compress_to = cf->get_value("params", "detect_3d/compress_to"); + cf->set_value("params", "detect_3d/compress_to", 0); + if (compress_to == 1) { + cf->set_value("params", "compress/mode", COMPRESS_VRAM_COMPRESSED); + } else if (compress_to == 2) { + cf->set_value("params", "compress/mode", COMPRESS_BASIS_UNIVERSAL); + } + cf->set_value("params", "mipmaps/generate", true); + changed = true; + } - make_flags.clear(); + if (changed) { + cf->save(src_path); + to_reimport.push_back(E->key()); + } + } - mutex->unlock(); + make_flags.clear(); + } if (to_reimport.size()) { EditorFileSystem::get_singleton()->reimport_files(to_reimport); @@ -642,10 +638,7 @@ ResourceImporterTexture::ResourceImporterTexture() { StreamTexture::request_3d_callback = _texture_reimport_3d; StreamTexture::request_roughness_callback = _texture_reimport_roughness; StreamTexture::request_normal_callback = _texture_reimport_normal; - mutex = Mutex::create(); } ResourceImporterTexture::~ResourceImporterTexture() { - - memdelete(mutex); } diff --git a/editor/import/resource_importer_texture.h b/editor/import/resource_importer_texture.h index 19d5498b4a..ed0fe1be89 100644 --- a/editor/import/resource_importer_texture.h +++ b/editor/import/resource_importer_texture.h @@ -58,7 +58,7 @@ protected: MAKE_NORMAL_FLAG = 4 }; - Mutex *mutex; + Mutex mutex; struct MakeInfo { int flags; |