mirror of
https://gitee.com/openharmony/graphic_graphic_2d
synced 2024-11-23 07:02:25 +00:00
commit
8edbaf0d5f
@ -36,6 +36,7 @@ namespace Rosen {
|
|||||||
namespace Drawing {
|
namespace Drawing {
|
||||||
using CmdListData = std::pair<const void*, size_t>;
|
using CmdListData = std::pair<const void*, size_t>;
|
||||||
using NodeId = uint64_t;
|
using NodeId = uint64_t;
|
||||||
|
constexpr size_t MAX_OPITEMSIZE = 10000;
|
||||||
|
|
||||||
class DRAWING_API ExtendImageObject {
|
class DRAWING_API ExtendImageObject {
|
||||||
public:
|
public:
|
||||||
|
@ -133,6 +133,8 @@ public:
|
|||||||
void SetIsCustomTypeface(bool isCustomTypeface);
|
void SetIsCustomTypeface(bool isCustomTypeface);
|
||||||
bool IsCustomTypeface() const;
|
bool IsCustomTypeface() const;
|
||||||
|
|
||||||
|
void SetIsRecordCmd(bool isRecordCmd);
|
||||||
|
|
||||||
using DrawFunc = std::function<void(Drawing::Canvas* canvas, const Drawing::Rect* rect)>;
|
using DrawFunc = std::function<void(Drawing::Canvas* canvas, const Drawing::Rect* rect)>;
|
||||||
protected:
|
protected:
|
||||||
bool addDrawOpImmediate_ = true;
|
bool addDrawOpImmediate_ = true;
|
||||||
@ -150,6 +152,7 @@ private:
|
|||||||
void GenerateCachedOpForTextblob(const TextBlob* blob, const scalar x, const scalar y, Paint& paint);
|
void GenerateCachedOpForTextblob(const TextBlob* blob, const scalar x, const scalar y, Paint& paint);
|
||||||
bool isCustomTextType_ = false;
|
bool isCustomTextType_ = false;
|
||||||
bool isCustomTypeface_ = false;
|
bool isCustomTypeface_ = false;
|
||||||
|
bool isRecordCmd_ = false;
|
||||||
std::optional<Brush> customTextBrush_ = std::nullopt;
|
std::optional<Brush> customTextBrush_ = std::nullopt;
|
||||||
std::optional<Pen> customTextPen_ = std::nullopt;
|
std::optional<Pen> customTextPen_ = std::nullopt;
|
||||||
std::stack<SaveOpState> saveOpStateStack_;
|
std::stack<SaveOpState> saveOpStateStack_;
|
||||||
|
@ -214,7 +214,9 @@ void DrawCmdList::CaculatePerformanceOpType()
|
|||||||
size_t offset = offset_;
|
size_t offset = offset_;
|
||||||
const int caculatePerformaceCount = 500; // 被测单接口用例至少出现500次以上
|
const int caculatePerformaceCount = 500; // 被测单接口用例至少出现500次以上
|
||||||
std::map<uint32_t, uint32_t> opTypeCountMap;
|
std::map<uint32_t, uint32_t> opTypeCountMap;
|
||||||
|
uint32_t count = 0;
|
||||||
do {
|
do {
|
||||||
|
count++;
|
||||||
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
||||||
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
||||||
if (curOpItemPtr == nullptr) {
|
if (curOpItemPtr == nullptr) {
|
||||||
@ -231,7 +233,7 @@ void DrawCmdList::CaculatePerformanceOpType()
|
|||||||
opTypeCountMap[type] = 1; // 记录出现的第1次
|
opTypeCountMap[type] = 1; // 记录出现的第1次
|
||||||
}
|
}
|
||||||
offset = curOpItemPtr->GetNextOpItemOffset();
|
offset = curOpItemPtr->GetNextOpItemOffset();
|
||||||
} while (offset != 0);
|
} while (offset != 0 && count <= MAX_OPITEMSIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawCmdList::UnmarshallingDrawOps()
|
void DrawCmdList::UnmarshallingDrawOps()
|
||||||
@ -252,7 +254,9 @@ void DrawCmdList::UnmarshallingDrawOps()
|
|||||||
lastOpGenSize_ = 0;
|
lastOpGenSize_ = 0;
|
||||||
uint32_t opReplaceIndex = 0;
|
uint32_t opReplaceIndex = 0;
|
||||||
size_t offset = offset_;
|
size_t offset = offset_;
|
||||||
|
uint32_t count = 0;
|
||||||
do {
|
do {
|
||||||
|
count++;
|
||||||
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
||||||
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
||||||
if (curOpItemPtr == nullptr) {
|
if (curOpItemPtr == nullptr) {
|
||||||
@ -291,7 +295,7 @@ void DrawCmdList::UnmarshallingDrawOps()
|
|||||||
LOGD("DrawCmdList::UnmarshallingOps seek end by cache textOps");
|
LOGD("DrawCmdList::UnmarshallingOps seek end by cache textOps");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (offset != 0);
|
} while (offset != 0 && count <= MAX_OPITEMSIZE);
|
||||||
lastOpGenSize_ = opAllocator_.GetSize();
|
lastOpGenSize_ = opAllocator_.GetSize();
|
||||||
|
|
||||||
if ((int)imageAllocator_.GetSize() > 0) {
|
if ((int)imageAllocator_.GetSize() > 0) {
|
||||||
@ -452,7 +456,9 @@ void DrawCmdList::GenerateCacheByBuffer(Canvas* canvas, const Rect* rect)
|
|||||||
size_t offset = offset_;
|
size_t offset = offset_;
|
||||||
GenerateCachedOpItemPlayer player = { *this, canvas, rect };
|
GenerateCachedOpItemPlayer player = { *this, canvas, rect };
|
||||||
uint32_t maxOffset = opAllocator_.GetSize();
|
uint32_t maxOffset = opAllocator_.GetSize();
|
||||||
|
uint32_t count = 0;
|
||||||
do {
|
do {
|
||||||
|
count++;
|
||||||
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
||||||
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
||||||
if (curOpItemPtr == nullptr) {
|
if (curOpItemPtr == nullptr) {
|
||||||
@ -471,7 +477,7 @@ void DrawCmdList::GenerateCacheByBuffer(Canvas* canvas, const Rect* rect)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
offset = curOpItemPtr->GetNextOpItemOffset();
|
offset = curOpItemPtr->GetNextOpItemOffset();
|
||||||
} while (offset != 0 && offset < maxOffset);
|
} while (offset != 0 && offset < maxOffset && count <= MAX_OPITEMSIZE);
|
||||||
isCached_ = true;
|
isCached_ = true;
|
||||||
cachedHighContrast_ = canvas && canvas->isHighContrastEnabled();
|
cachedHighContrast_ = canvas && canvas->isHighContrastEnabled();
|
||||||
#endif
|
#endif
|
||||||
@ -541,9 +547,11 @@ void DrawCmdList::PlaybackByBuffer(Canvas& canvas, const Rect* rect)
|
|||||||
}
|
}
|
||||||
size_t offset = offset_;
|
size_t offset = offset_;
|
||||||
if (lastOpGenSize_ != opAllocator_.GetSize()) {
|
if (lastOpGenSize_ != opAllocator_.GetSize()) {
|
||||||
|
uint32_t count = 0;
|
||||||
UnmarshallingPlayer player = { *this };
|
UnmarshallingPlayer player = { *this };
|
||||||
drawOpItems_.clear();
|
drawOpItems_.clear();
|
||||||
do {
|
do {
|
||||||
|
count++;
|
||||||
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
||||||
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
||||||
if (curOpItemPtr == nullptr) {
|
if (curOpItemPtr == nullptr) {
|
||||||
@ -554,7 +562,7 @@ void DrawCmdList::PlaybackByBuffer(Canvas& canvas, const Rect* rect)
|
|||||||
drawOpItems_.emplace_back(op);
|
drawOpItems_.emplace_back(op);
|
||||||
}
|
}
|
||||||
offset = curOpItemPtr->GetNextOpItemOffset();
|
offset = curOpItemPtr->GetNextOpItemOffset();
|
||||||
} while (offset != 0);
|
} while (offset != 0 && count <= MAX_OPITEMSIZE);
|
||||||
lastOpGenSize_ = opAllocator_.GetSize();
|
lastOpGenSize_ = opAllocator_.GetSize();
|
||||||
}
|
}
|
||||||
for (auto op : drawOpItems_) {
|
for (auto op : drawOpItems_) {
|
||||||
@ -571,7 +579,9 @@ size_t DrawCmdList::CountTextBlobNum()
|
|||||||
if (mode_ == DrawCmdList::UnmarshalMode::IMMEDIATE) {
|
if (mode_ == DrawCmdList::UnmarshalMode::IMMEDIATE) {
|
||||||
size_t offset = offset_;
|
size_t offset = offset_;
|
||||||
size_t maxOffset = opAllocator_.GetSize();
|
size_t maxOffset = opAllocator_.GetSize();
|
||||||
|
uint32_t count = 0;
|
||||||
do {
|
do {
|
||||||
|
count++;
|
||||||
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
||||||
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
||||||
if (curOpItemPtr == nullptr) {
|
if (curOpItemPtr == nullptr) {
|
||||||
@ -582,7 +592,7 @@ size_t DrawCmdList::CountTextBlobNum()
|
|||||||
textBlobCnt++;
|
textBlobCnt++;
|
||||||
}
|
}
|
||||||
offset = curOpItemPtr->GetNextOpItemOffset();
|
offset = curOpItemPtr->GetNextOpItemOffset();
|
||||||
} while (offset != 0 && offset < maxOffset);
|
} while (offset != 0 && offset < maxOffset && count <= MAX_OPITEMSIZE);
|
||||||
}
|
}
|
||||||
return textBlobCnt;
|
return textBlobCnt;
|
||||||
}
|
}
|
||||||
@ -593,7 +603,9 @@ void DrawCmdList::PatchTypefaceIds()
|
|||||||
uint64_t replayMask = (uint64_t)1 << bitNumber;
|
uint64_t replayMask = (uint64_t)1 << bitNumber;
|
||||||
size_t offset = offset_;
|
size_t offset = offset_;
|
||||||
size_t maxOffset = opAllocator_.GetSize();
|
size_t maxOffset = opAllocator_.GetSize();
|
||||||
|
uint32_t count = 0;
|
||||||
do {
|
do {
|
||||||
|
count++;
|
||||||
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
void* itemPtr = opAllocator_.OffsetToAddr(offset, sizeof(OpItem));
|
||||||
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
auto* curOpItemPtr = static_cast<OpItem*>(itemPtr);
|
||||||
if (curOpItemPtr == nullptr) {
|
if (curOpItemPtr == nullptr) {
|
||||||
@ -608,7 +620,7 @@ void DrawCmdList::PatchTypefaceIds()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
offset = curOpItemPtr->GetNextOpItemOffset();
|
offset = curOpItemPtr->GetNextOpItemOffset();
|
||||||
} while (offset != 0 && offset < maxOffset);
|
} while (offset != 0 && offset < maxOffset && count <= MAX_OPITEMSIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawCmdList::Purge()
|
void DrawCmdList::Purge()
|
||||||
|
@ -39,8 +39,10 @@ std::shared_ptr<MaskCmdList> MaskCmdList::CreateFromData(const CmdListData& data
|
|||||||
bool MaskCmdList::Playback(MaskPlayer &player) const
|
bool MaskCmdList::Playback(MaskPlayer &player) const
|
||||||
{
|
{
|
||||||
uint32_t offset = 0;
|
uint32_t offset = 0;
|
||||||
|
uint32_t count = 0;
|
||||||
size_t totalSize = opAllocator_.GetSize();
|
size_t totalSize = opAllocator_.GetSize();
|
||||||
do {
|
do {
|
||||||
|
count++;
|
||||||
if (totalSize < offset || totalSize - offset < sizeof(OpItem)) {
|
if (totalSize < offset || totalSize - offset < sizeof(OpItem)) {
|
||||||
LOGD("MaskCmdList::Playback size error");
|
LOGD("MaskCmdList::Playback size error");
|
||||||
return false;
|
return false;
|
||||||
@ -58,7 +60,7 @@ bool MaskCmdList::Playback(MaskPlayer &player) const
|
|||||||
LOGE("MaskCmdList::Playback failed, opItem is nullptr");
|
LOGE("MaskCmdList::Playback failed, opItem is nullptr");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (offset != 0);
|
} while (offset != 0 && count <= MAX_OPITEMSIZE);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ bool MemAllocator::Resize(size_t size)
|
|||||||
|
|
||||||
void* MemAllocator::Add(const void* data, size_t size)
|
void* MemAllocator::Add(const void* data, size_t size)
|
||||||
{
|
{
|
||||||
if (isReadOnly_ || !data || size == 0 || size > MEM_SIZE_MAX) {
|
if (isReadOnly_ || !data || size == 0 || size > MEM_SIZE_MAX || size > MEM_SIZE_MAX - size_) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
auto current = startPtr_ + size_;
|
auto current = startPtr_ + size_;
|
||||||
|
@ -364,6 +364,10 @@ void RecordingCanvas::DrawRecordCmd(const std::shared_ptr<RecordCmd> recordCmd,
|
|||||||
LOGE("RecordingCanvas::DrawRecordCmd, recordCmd is nullptr!");
|
LOGE("RecordingCanvas::DrawRecordCmd, recordCmd is nullptr!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (isRecordCmd_) {
|
||||||
|
LOGE("RecordingCanvas::DrawRecordCmd, operation is unsupported!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!addDrawOpImmediate_) {
|
if (!addDrawOpImmediate_) {
|
||||||
cmdList_->AddDrawOp(std::make_shared<DrawRecordCmdOpItem>(recordCmd, matrix, brush));
|
cmdList_->AddDrawOp(std::make_shared<DrawRecordCmdOpItem>(recordCmd, matrix, brush));
|
||||||
return;
|
return;
|
||||||
@ -707,6 +711,11 @@ bool RecordingCanvas::IsCustomTypeface() const
|
|||||||
return isCustomTypeface_;
|
return isCustomTypeface_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RecordingCanvas::SetIsRecordCmd(bool isRecordCmd)
|
||||||
|
{
|
||||||
|
isRecordCmd_ = isRecordCmd;
|
||||||
|
}
|
||||||
|
|
||||||
void RecordingCanvas::CheckForLazySave()
|
void RecordingCanvas::CheckForLazySave()
|
||||||
{
|
{
|
||||||
if (!saveOpStateStack_.empty() && saveOpStateStack_.top() == LazySaveOp) {
|
if (!saveOpStateStack_.empty() && saveOpStateStack_.top() == LazySaveOp) {
|
||||||
|
@ -201,6 +201,10 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static RSB_EXPORT bool Marshalling(Parcel& parcel, const std::shared_ptr<Drawing::DrawCmdList>& val,
|
||||||
|
bool isRecordCmd = false);
|
||||||
|
static RSB_EXPORT bool Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::DrawCmdList>& val,
|
||||||
|
bool isRecordCmd = false);
|
||||||
static RSB_EXPORT bool Marshalling(Parcel& parcel, std::shared_ptr<Drawing::Typeface>& val);
|
static RSB_EXPORT bool Marshalling(Parcel& parcel, std::shared_ptr<Drawing::Typeface>& val);
|
||||||
static RSB_EXPORT bool Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::Typeface>& val);
|
static RSB_EXPORT bool Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::Typeface>& val);
|
||||||
static RSB_EXPORT bool Marshalling(Parcel& parcel, const std::shared_ptr<Drawing::Image>& val);
|
static RSB_EXPORT bool Marshalling(Parcel& parcel, const std::shared_ptr<Drawing::Image>& val);
|
||||||
@ -252,7 +256,6 @@ public:
|
|||||||
DECLARE_FUNCTION_OVERLOAD(RenderParticleColorParaType)
|
DECLARE_FUNCTION_OVERLOAD(RenderParticleColorParaType)
|
||||||
DECLARE_FUNCTION_OVERLOAD(std::shared_ptr<ParticleRenderParams>)
|
DECLARE_FUNCTION_OVERLOAD(std::shared_ptr<ParticleRenderParams>)
|
||||||
DECLARE_FUNCTION_OVERLOAD(std::vector<std::shared_ptr<ParticleRenderParams>>)
|
DECLARE_FUNCTION_OVERLOAD(std::vector<std::shared_ptr<ParticleRenderParams>>)
|
||||||
DECLARE_FUNCTION_OVERLOAD(std::shared_ptr<Drawing::DrawCmdList>)
|
|
||||||
DECLARE_FUNCTION_OVERLOAD(std::shared_ptr<Drawing::RecordCmd>)
|
DECLARE_FUNCTION_OVERLOAD(std::shared_ptr<Drawing::RecordCmd>)
|
||||||
DECLARE_FUNCTION_OVERLOAD(std::shared_ptr<RSExtendImageObject>)
|
DECLARE_FUNCTION_OVERLOAD(std::shared_ptr<RSExtendImageObject>)
|
||||||
DECLARE_FUNCTION_OVERLOAD(std::shared_ptr<RSExtendImageBaseObj>)
|
DECLARE_FUNCTION_OVERLOAD(std::shared_ptr<RSExtendImageBaseObj>)
|
||||||
|
@ -33,6 +33,7 @@ Drawing::Canvas* RSRecordCmdUtils::BeginRecording(Drawing::Rect& bounds)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
extendRecordingCanvas_ = std::make_shared<ExtendRecordingCanvas>(width, height);
|
extendRecordingCanvas_ = std::make_shared<ExtendRecordingCanvas>(width, height);
|
||||||
|
extendRecordingCanvas_->SetIsRecordCmd(true);
|
||||||
cullRect_ = bounds;
|
cullRect_ = bounds;
|
||||||
return extendRecordingCanvas_.get();
|
return extendRecordingCanvas_.get();
|
||||||
}
|
}
|
||||||
|
@ -366,12 +366,13 @@ bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, RRectT<float>& val)
|
|||||||
|
|
||||||
|
|
||||||
// Drawing::DrawCmdList
|
// Drawing::DrawCmdList
|
||||||
bool RSMarshallingHelper::Marshalling(Parcel& parcel, const std::shared_ptr<Drawing::DrawCmdList>& val)
|
bool RSMarshallingHelper::Marshalling(Parcel& parcel, const std::shared_ptr<Drawing::DrawCmdList>& val,
|
||||||
|
bool isRecordCmd)
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::DrawCmdList>& val)
|
bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::DrawCmdList>& val, bool isRecordCmd)
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,6 @@ namespace {
|
|||||||
bool g_useSharedMem = true;
|
bool g_useSharedMem = true;
|
||||||
std::thread::id g_tid = std::thread::id();
|
std::thread::id g_tid = std::thread::id();
|
||||||
constexpr size_t PIXELMAP_UNMARSHALLING_DEBUG_OFFSET = 12;
|
constexpr size_t PIXELMAP_UNMARSHALLING_DEBUG_OFFSET = 12;
|
||||||
constexpr size_t MAX_OPITEMSIZE = 10000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MARSHALLING_AND_UNMARSHALLING(TYPE, TYPENAME) \
|
#define MARSHALLING_AND_UNMARSHALLING(TYPE, TYPENAME) \
|
||||||
@ -438,10 +437,18 @@ bool RSMarshallingHelper::ReadColorSpaceFromParcel(Parcel& parcel, std::shared_p
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (data->BuildWithoutCopy(dataPtr, size) == false) {
|
if (data->BuildWithoutCopy(dataPtr, size) == false) {
|
||||||
|
if (isMal) {
|
||||||
|
free(const_cast<void*>(dataPtr));
|
||||||
|
dataPtr = nullptr;
|
||||||
|
}
|
||||||
ROSEN_LOGE("data build without copy failed");
|
ROSEN_LOGE("data build without copy failed");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (colorSpace->Deserialize(data) == false) {
|
if (colorSpace->Deserialize(data) == false) {
|
||||||
|
if (isMal) {
|
||||||
|
free(const_cast<void*>(dataPtr));
|
||||||
|
dataPtr = nullptr;
|
||||||
|
}
|
||||||
ROSEN_LOGE("colorSpace deserialize failed");
|
ROSEN_LOGE("colorSpace deserialize failed");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -468,11 +475,23 @@ bool RSMarshallingHelper::UnmarshallingNoLazyGeneratedImage(Parcel& parcel,
|
|||||||
int width = parcel.ReadInt32();
|
int width = parcel.ReadInt32();
|
||||||
int height = parcel.ReadInt32();
|
int height = parcel.ReadInt32();
|
||||||
|
|
||||||
Drawing::ColorType colorType = static_cast<Drawing::ColorType>(parcel.ReadUint32());
|
size_t ct = parcel.ReadUint32();
|
||||||
Drawing::AlphaType alphaType = static_cast<Drawing::AlphaType>(parcel.ReadUint32());
|
Drawing::ColorType colorType = Drawing::ColorType::COLORTYPE_UNKNOWN;
|
||||||
|
if (ct >= Drawing::ColorType::COLORTYPE_ALPHA_8 && ct <= Drawing::ColorType::COLORTYPE_RGB_888X) {
|
||||||
|
colorType = static_cast<Drawing::ColorType>(ct);
|
||||||
|
}
|
||||||
|
size_t at = parcel.ReadUint32();
|
||||||
|
Drawing::AlphaType alphaType = Drawing::AlphaType::ALPHATYPE_UNKNOWN;
|
||||||
|
if (at >= Drawing::AlphaType::ALPHATYPE_OPAQUE && at <= Drawing::AlphaType::ALPHATYPE_UNPREMUL) {
|
||||||
|
alphaType = static_cast<Drawing::AlphaType>(at);
|
||||||
|
}
|
||||||
auto colorSpace = std::make_shared<Drawing::ColorSpace>(Drawing::ColorSpace::ColorSpaceType::NO_TYPE);
|
auto colorSpace = std::make_shared<Drawing::ColorSpace>(Drawing::ColorSpace::ColorSpaceType::NO_TYPE);
|
||||||
|
|
||||||
if (!ReadColorSpaceFromParcel(parcel, colorSpace)) {
|
if (!ReadColorSpaceFromParcel(parcel, colorSpace)) {
|
||||||
|
if (isMalloc) {
|
||||||
|
free(const_cast<void*>(addr));
|
||||||
|
addr = nullptr;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -583,8 +602,12 @@ bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<RSShader
|
|||||||
ROSEN_LOGE("unirender: RSMarshallingHelper::Unmarshalling RSShader, data is nullptr");
|
ROSEN_LOGE("unirender: RSMarshallingHelper::Unmarshalling RSShader, data is nullptr");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
auto shaderEffect = std::make_shared<Drawing::ShaderEffect>
|
Drawing::ShaderEffect::ShaderEffectType shaderEffectType = Drawing::ShaderEffect::ShaderEffectType::NO_TYPE;
|
||||||
(static_cast<Drawing::ShaderEffect::ShaderEffectType>(type));
|
if (type >= static_cast<int32_t>(Drawing::ShaderEffect::ShaderEffectType::COLOR_SHADER) &&
|
||||||
|
type <= static_cast<int32_t>(Drawing::ShaderEffect::ShaderEffectType::EXTEND_SHADER)) {
|
||||||
|
shaderEffectType = static_cast<Drawing::ShaderEffect::ShaderEffectType>(type);
|
||||||
|
}
|
||||||
|
auto shaderEffect = std::make_shared<Drawing::ShaderEffect>(shaderEffectType);
|
||||||
if (!shaderEffect->Deserialize(data)) {
|
if (!shaderEffect->Deserialize(data)) {
|
||||||
ROSEN_LOGE("unirender: RSMarshallingHelper::Unmarshalling RSShader, Deserialize failed");
|
ROSEN_LOGE("unirender: RSMarshallingHelper::Unmarshalling RSShader, Deserialize failed");
|
||||||
return false;
|
return false;
|
||||||
@ -1522,13 +1545,14 @@ bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, RRectT<float>& val)
|
|||||||
|
|
||||||
|
|
||||||
// Drawing::DrawCmdList
|
// Drawing::DrawCmdList
|
||||||
bool RSMarshallingHelper::Marshalling(Parcel& parcel, const std::shared_ptr<Drawing::DrawCmdList>& val)
|
bool RSMarshallingHelper::Marshalling(Parcel& parcel, const std::shared_ptr<Drawing::DrawCmdList>& val,
|
||||||
|
bool isRecordCmd)
|
||||||
{
|
{
|
||||||
if (!val) {
|
if (!val) {
|
||||||
return parcel.WriteInt32(-1);
|
return parcel.WriteInt32(-1);
|
||||||
}
|
}
|
||||||
auto opItemSize = val->GetOpItemSize();
|
auto opItemSize = val->GetOpItemSize();
|
||||||
if (opItemSize > MAX_OPITEMSIZE) {
|
if (opItemSize > Drawing::MAX_OPITEMSIZE) {
|
||||||
ROSEN_LOGE("OpItemSize is too large, OpItemSize is %{public}zu", opItemSize);
|
ROSEN_LOGE("OpItemSize is too large, OpItemSize is %{public}zu", opItemSize);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1623,10 +1647,12 @@ bool RSMarshallingHelper::Marshalling(Parcel& parcel, const std::shared_ptr<Draw
|
|||||||
ROSEN_LOGE("unirender: failed RSMarshallingHelper::Marshalling Drawing::DrawCmdList ExtendObject");
|
ROSEN_LOGE("unirender: failed RSMarshallingHelper::Marshalling Drawing::DrawCmdList ExtendObject");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ret &= MarshallingRecordCmdFromDrawCmdList(parcel, val);
|
if (!isRecordCmd) {
|
||||||
if (!ret) {
|
ret &= MarshallingRecordCmdFromDrawCmdList(parcel, val);
|
||||||
ROSEN_LOGE("unirender: failed RSMarshallingHelper::Marshalling Drawing::DrawCmdList RecordCmd");
|
if (!ret) {
|
||||||
return ret;
|
ROSEN_LOGE("unirender: failed RSMarshallingHelper::Marshalling Drawing::DrawCmdList RecordCmd");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#ifdef ROSEN_OHOS
|
#ifdef ROSEN_OHOS
|
||||||
std::vector<std::shared_ptr<Drawing::SurfaceBufferEntry>> surfaceBufferEntryVec;
|
std::vector<std::shared_ptr<Drawing::SurfaceBufferEntry>> surfaceBufferEntryVec;
|
||||||
@ -1655,7 +1681,7 @@ bool RSMarshallingHelper::Marshalling(Parcel& parcel, const std::shared_ptr<Draw
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::DrawCmdList>& val)
|
bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::DrawCmdList>& val, bool isRecordCmd)
|
||||||
{
|
{
|
||||||
int32_t size = parcel.ReadInt32();
|
int32_t size = parcel.ReadInt32();
|
||||||
if (size == -1) {
|
if (size == -1) {
|
||||||
@ -1744,7 +1770,7 @@ bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing:
|
|||||||
bool ret = true;
|
bool ret = true;
|
||||||
uint32_t objectSize = parcel.ReadUint32();
|
uint32_t objectSize = parcel.ReadUint32();
|
||||||
if (objectSize > 0) {
|
if (objectSize > 0) {
|
||||||
if (objectSize > PARTICLE_UPPER_LIMIT) {
|
if (objectSize > Drawing::MAX_OPITEMSIZE) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
std::vector<std::shared_ptr<Drawing::ExtendImageObject>> imageObjectVec;
|
std::vector<std::shared_ptr<Drawing::ExtendImageObject>> imageObjectVec;
|
||||||
@ -1763,7 +1789,7 @@ bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing:
|
|||||||
|
|
||||||
uint32_t objectBaseSize = parcel.ReadUint32();
|
uint32_t objectBaseSize = parcel.ReadUint32();
|
||||||
if (objectBaseSize > 0) {
|
if (objectBaseSize > 0) {
|
||||||
if (objectBaseSize > PARTICLE_UPPER_LIMIT) {
|
if (objectBaseSize > Drawing::MAX_OPITEMSIZE) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
std::vector<std::shared_ptr<Drawing::ExtendImageBaseObj>> ObjectBaseVec;
|
std::vector<std::shared_ptr<Drawing::ExtendImageBaseObj>> ObjectBaseVec;
|
||||||
@ -1786,15 +1812,17 @@ bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret &= UnmarshallingRecordCmdToDrawCmdList(parcel, val);
|
if (!isRecordCmd) {
|
||||||
if (!ret) {
|
ret &= UnmarshallingRecordCmdToDrawCmdList(parcel, val);
|
||||||
ROSEN_LOGE("unirender: failed RSMarshallingHelper::Marshalling Drawing::DrawCmdList RecordCmd");
|
if (!ret) {
|
||||||
return ret;
|
ROSEN_LOGE("unirender: failed RSMarshallingHelper::Marshalling Drawing::DrawCmdList RecordCmd");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#ifdef ROSEN_OHOS
|
#ifdef ROSEN_OHOS
|
||||||
uint32_t surfaceBufferEntrySize = parcel.ReadUint32();
|
uint32_t surfaceBufferEntrySize = parcel.ReadUint32();
|
||||||
if (surfaceBufferEntrySize > 0) {
|
if (surfaceBufferEntrySize > 0) {
|
||||||
if (surfaceBufferEntrySize > PARTICLE_UPPER_LIMIT) {
|
if (surfaceBufferEntrySize > Drawing::MAX_OPITEMSIZE) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
std::vector<std::shared_ptr<Drawing::SurfaceBufferEntry>> surfaceBufferEntryVec;
|
std::vector<std::shared_ptr<Drawing::SurfaceBufferEntry>> surfaceBufferEntryVec;
|
||||||
@ -1834,7 +1862,7 @@ bool RSMarshallingHelper::Marshalling(Parcel& parcel, const std::shared_ptr<Draw
|
|||||||
const auto& rect = val->GetCullRect();
|
const auto& rect = val->GetCullRect();
|
||||||
return parcel.WriteFloat(rect.GetLeft()) && parcel.WriteFloat(rect.GetTop()) &&
|
return parcel.WriteFloat(rect.GetLeft()) && parcel.WriteFloat(rect.GetTop()) &&
|
||||||
parcel.WriteFloat(rect.GetRight()) && parcel.WriteFloat(rect.GetBottom()) &&
|
parcel.WriteFloat(rect.GetRight()) && parcel.WriteFloat(rect.GetBottom()) &&
|
||||||
RSMarshallingHelper::Marshalling(parcel, val->GetDrawCmdList());
|
RSMarshallingHelper::Marshalling(parcel, val->GetDrawCmdList(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::RecordCmd>& val)
|
bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::RecordCmd>& val)
|
||||||
@ -1851,7 +1879,7 @@ bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
std::shared_ptr<Drawing::DrawCmdList> drawCmdList = nullptr;
|
std::shared_ptr<Drawing::DrawCmdList> drawCmdList = nullptr;
|
||||||
success = RSMarshallingHelper::Unmarshalling(parcel, drawCmdList);
|
success = RSMarshallingHelper::Unmarshalling(parcel, drawCmdList, true);
|
||||||
if (!success) {
|
if (!success) {
|
||||||
ROSEN_LOGE("RSMarshallingHelper::Unmarshalling RecordCmd, drawCmdList unmarshalling failed.");
|
ROSEN_LOGE("RSMarshallingHelper::Unmarshalling RecordCmd, drawCmdList unmarshalling failed.");
|
||||||
return false;
|
return false;
|
||||||
|
@ -365,12 +365,13 @@ bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, RRectT<float>& val)
|
|||||||
|
|
||||||
|
|
||||||
// Drawing::DrawCmdList
|
// Drawing::DrawCmdList
|
||||||
bool RSMarshallingHelper::Marshalling(Parcel& parcel, const std::shared_ptr<Drawing::DrawCmdList>& val)
|
bool RSMarshallingHelper::Marshalling(Parcel& parcel, const std::shared_ptr<Drawing::DrawCmdList>& val,
|
||||||
|
bool isRecordCmd)
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::DrawCmdList>& val)
|
bool RSMarshallingHelper::Unmarshalling(Parcel& parcel, std::shared_ptr<Drawing::DrawCmdList>& val, bool isRecordCmd)
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user