1#ifndef YAZE_APP_PLATFORM_WASM_WASM_LOADING_MANAGER_H_
2#define YAZE_APP_PLATFORM_WASM_WASM_LOADING_MANAGER_H_
10#include <unordered_map>
12#include "absl/status/status.h"
13#include "absl/strings/str_format.h"
51class WasmLoadingManager {
60 using LoadingHandle = uint64_t;
65 static constexpr LoadingHandle kInvalidHandle = 0;
72 static uint32_t GetJsId(LoadingHandle handle) {
73 return static_cast<uint32_t
>(handle & 0xFFFFFFFF);
81 static LoadingHandle BeginLoading(
const std::string& task_name);
88 static void UpdateProgress(LoadingHandle handle,
float progress);
95 static void UpdateMessage(LoadingHandle handle,
const std::string& message);
102 static bool IsCancelled(LoadingHandle handle);
108 static void EndLoading(LoadingHandle handle);
121 static bool ReportArenaProgress(
int current,
int total,
122 const std::string& item_name);
132 static void SetArenaHandle(LoadingHandle handle);
137 static void ClearArenaHandle();
143 struct LoadingOperation {
144 std::string task_name;
145 float progress = 0.0f;
147 std::atomic<bool> cancelled{
false};
149 uint32_t generation = 0;
155 static WasmLoadingManager& GetInstance();
160 WasmLoadingManager();
165 ~WasmLoadingManager();
168 WasmLoadingManager(
const WasmLoadingManager&) =
delete;
169 WasmLoadingManager& operator=(
const WasmLoadingManager&) =
delete;
170 WasmLoadingManager(WasmLoadingManager&&) =
delete;
171 WasmLoadingManager& operator=(WasmLoadingManager&&) =
delete;
176 static LoadingHandle MakeHandle(uint32_t js_id, uint32_t generation) {
177 return (
static_cast<uint64_t
>(generation) << 32) | js_id;
183 static uint32_t GetGeneration(LoadingHandle handle) {
184 return static_cast<uint32_t
>(handle >> 32);
193 std::atomic<uint32_t> next_js_id_{1};
201 std::atomic<uint32_t> generation_counter_{1};
206 std::unordered_map<LoadingHandle, std::unique_ptr<LoadingOperation>>
220 LoadingHandle arena_handle_ = kInvalidHandle;