* Copyright (c) 2020-2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef GRAPHIC_LITE_CACHE_MANAGER_H
#define GRAPHIC_LITE_CACHE_MANAGER_H
#include "file_img_decoder.h"
namespace OHOS {
class CacheEntry : public HeapBase {
public:
CacheEntry() : dsc_{0}, life_(0) {}
~CacheEntry() {}
ImageSrcType GetImgSrcType() const
{
return dsc_.srcType;
}
const uint8_t* GetImgData() const;
ImageHeader GetImgHeader() const
{
return dsc_.imgInfo.header;
}
ImageInfo GetImageInfo() const
{
return dsc_.imgInfo;
}
RetCode ReadLine(const Point& start, int16_t bufSize, uint8_t* buf);
bool InCache() const
{
return dsc_.inCache_;
}
private:
static constexpr uint16_t MAX_SRC_LENGTH = 4096;
friend class CacheManager;
void Clear();
void ClearSrc();
RetCode SetSrc(const char* path);
FileImgDecoder::ImgResDsc dsc_;
int32_t life_;
};
class CacheManager : public HeapBase {
public:
static CacheManager& GetInstance();
RetCode Init(uint16_t size);
uint16_t GetSize()
{
return size_;
}
RetCode Open(const char* path, const Style& style, CacheEntry& entry);
RetCode Close(const char* path);
RetCode Reset();
RetCode ReadToCache(CacheEntry& entry);
bool GetImageHeader(const char* path, ImageHeader& header);
private:
CacheManager() : size_(0), entryArr_(nullptr){}
~CacheManager() {}
void Clear(CacheEntry& entry);
void AgingAll(int32_t time = AGING_INTERVAL);
RetCode GetIndex(const char* src, uint16_t& hittedIndex);
RetCode SelectEntryToReplace(uint16_t& selectedIndex);
RetCode TryDecode(const char* path, const Style& style, CacheEntry& entry);
uint16_t size_;
CacheEntry* entryArr_;
static constexpr uint8_t AGING_INTERVAL = 1;
static constexpr uint8_t LIFE_GAIN_INTERVAL = 1;
static constexpr uint16_t LIFE_LIMIT = 1000;
};
}
#endif