X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fresources%2Fresourcemanager.h;h=bd87de8929ad92fc38b2703313168d2df1d75628;hp=ba4f39a9461668cbe4912a9f2d8afe5a8ee38e97;hb=38712d8ecc57d043a2419ffbaeeb57f7a6586f14;hpb=fdff67dff702ef3a87b388461c60d195789e0dc9 diff --git a/source/resources/resourcemanager.h b/source/resources/resourcemanager.h index ba4f39a9..bd87de89 100644 --- a/source/resources/resourcemanager.h +++ b/source/resources/resourcemanager.h @@ -1,7 +1,8 @@ #ifndef MSP_GL_RESOURCEMANAGER_H_ #define MSP_GL_RESOURCEMANAGER_H_ -#include +#include +#include #include #include #include @@ -61,7 +62,7 @@ private: Resource::AsyncLoader *loader; State state; unsigned last_used; - UInt64 data_size; + std::uint64_t data_size; std::vector observers; ManagedResource(Resource &); @@ -76,20 +77,18 @@ private: void remove_observer(ResourceObserver &); }; - typedef std::list LoadQueue; - class LoadingThread: public Thread { private: Semaphore sem; Mutex queue_mutex; - LoadQueue async_queue; - LoadQueue sync_queue; + std::deque async_queue; + std::deque sync_queue; unsigned capacity; unsigned size; std::list error_queue; Mutex data_size_mutex; - UInt64 loaded_data_size; + std::uint64_t loaded_data_size; volatile bool done; public: @@ -98,7 +97,7 @@ private: private: virtual void main(); - ManagedResource *front(LoadQueue &); + ManagedResource *front(std::deque &); public: void add_resource(ManagedResource &); @@ -108,33 +107,30 @@ private: public: bool sync(); bool needs_work() const { return size ResourceMap; - - LoadingPolicy policy; - bool async_loads; + LoadingPolicy policy = LOAD_ON_DEMAND; + bool async_loads = true; mutable Mutex map_mutex; - ResourceMap resources; - LoadQueue queue; - UInt64 total_data_size; - UInt64 size_limit; - unsigned frame; - unsigned min_retain_frames; - unsigned max_retain_frames; - unsigned next_unload; + std::map resources; + std::deque queue; + std::uint64_t total_data_size = 0; + std::uint64_t size_limit = 0; + unsigned frame = 0; + unsigned min_retain_frames = 30; + unsigned max_retain_frames = 0; + unsigned next_unload = 0; LoadingThread thread; public: - ResourceManager(); ~ResourceManager(); void set_loading_policy(LoadingPolicy); void set_async_loads(bool); - void set_size_limit(UInt64); + void set_size_limit(std::uint64_t); void set_min_retain_frames(unsigned); void set_max_retain_frames(unsigned); @@ -161,7 +157,7 @@ private: void unload_by_age(); void unload_by_size(); public: - UInt64 get_total_data_size() const { return total_data_size; } + std::uint64_t get_total_data_size() const { return total_data_size; } private: static bool age_order(ManagedResource *, ManagedResource *);