Files
UnrealEngineUWP/Engine/Source/Runtime/RuntimeAssetCache/Private/RuntimeAssetCache.h
Mikolaj Sieluzycki 8c51156535 Implementation of RuntimeAssetCache
#codereview Robert.Manuszewski

[CL 2582347 by Mikolaj Sieluzycki in Main branch]
2015-06-10 03:14:50 -04:00

66 lines
2.0 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "RuntimeAssetCacheInterface.h"
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("RAC ASync Wait Time"), STAT_RAC_ASyncWaitTime, STATGROUP_RAC, );
/** Forward declarations. */
class FRuntimeAssetCacheBuilderInterface;
class IRuntimeAssetCacheBackend;
class FRuntimeAssetCacheAsyncWorker;
class FCacheEntryMetadata;
class FRuntimeAssetCacheBucket;
/**
* Concrete class implementing FRuntimeAssetCacheInterface.
*/
class FRuntimeAssetCache : public FRuntimeAssetCacheInterface
{
/** FRuntimeAssetCacheInterface implementation */
public:
virtual bool GetSynchronous(FRuntimeAssetCacheBuilderInterface* CacheBuilder, TArray<uint8>& OutData) override;
virtual uint32 GetAsynchronous(FRuntimeAssetCacheBuilderInterface* CacheBuilder) override;
virtual int32 GetCacheSize(FName Bucket) const override;
virtual bool ClearCache() override;
virtual bool ClearCache(FName Bucket) override;
virtual void WaitAsynchronousCompletion(uint32 Handle) override;
virtual bool GetAsynchronousResults(uint32 Handle, TArray<uint8>& OutData) override;
virtual bool PollAsynchronousCompletion(uint32 Handle) override;
virtual void AddToAsyncCompletionCounter(int32 Addend) override;
/** End of FRuntimeAssetCacheInterface implementation */
public:
/** Constructor */
FRuntimeAssetCache();
/** Destructor */
~FRuntimeAssetCache();
private:
/**
* Generates next handle of async worker.
* @return Worker handle.
*/
int32 GetNextHandle()
{
return CurrentAsyncTaskHandle.Increment();
}
/** Map of bucket names to their configs. */
TMap<FName, FRuntimeAssetCacheBucket*> Buckets;
/** Map of handle to pending task */
TMap<uint32, FAsyncTask<FRuntimeAssetCacheAsyncWorker>*> PendingTasks;
/** Pending tasks synchronization object. */
FCriticalSection SynchronizationObject;
/** Counter used to generate worker handles. */
FThreadSafeCounter CurrentAsyncTaskHandle;
/** Number of pending tasks. */
FThreadSafeCounter PendingTasksCounter;
};