summaryrefslogtreecommitdiff
path: root/libs/hwui/TessellationCache.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/TessellationCache.h')
-rw-r--r--libs/hwui/TessellationCache.h225
1 files changed, 0 insertions, 225 deletions
diff --git a/libs/hwui/TessellationCache.h b/libs/hwui/TessellationCache.h
deleted file mode 100644
index a0f0ed4653e0..000000000000
--- a/libs/hwui/TessellationCache.h
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * 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.
- */
-
-#pragma once
-
-#include "Debug.h"
-#include "Matrix.h"
-#include "Rect.h"
-#include "Vector.h"
-#include "VertexBuffer.h"
-#include "thread/TaskProcessor.h"
-#include "utils/Macros.h"
-#include "utils/Pair.h"
-
-#include <SkPaint.h>
-#include <SkPath.h>
-
-#include <utils/LruCache.h>
-#include <utils/Mutex.h>
-#include <utils/StrongPointer.h>
-
-class SkBitmap;
-class SkCanvas;
-struct SkRect;
-
-namespace android {
-namespace uirenderer {
-
-class Caches;
-class VertexBuffer;
-
-///////////////////////////////////////////////////////////////////////////////
-// Classes
-///////////////////////////////////////////////////////////////////////////////
-
-class TessellationCache {
-public:
- typedef Pair<VertexBuffer*, VertexBuffer*> vertexBuffer_pair_t;
-
- struct Description {
- HASHABLE_TYPE(Description);
- enum class Type {
- None,
- RoundRect,
- };
-
- Type type;
- float scaleX;
- float scaleY;
- bool aa;
- SkPaint::Cap cap;
- SkPaint::Style style;
- float strokeWidth;
- union Shape {
- struct RoundRect {
- float width;
- float height;
- float rx;
- float ry;
- } roundRect;
- } shape;
-
- Description();
- Description(Type type, const Matrix4& transform, const SkPaint& paint);
- void setupMatrixAndPaint(Matrix4* matrix, SkPaint* paint) const;
- };
-
- struct ShadowDescription {
- HASHABLE_TYPE(ShadowDescription);
- const SkPath* nodeKey;
- float matrixData[16];
-
- ShadowDescription();
- ShadowDescription(const SkPath* nodeKey, const Matrix4* drawTransform);
- };
-
- class ShadowTask : public Task<vertexBuffer_pair_t> {
- public:
- ShadowTask(const Matrix4* drawTransform, const Rect& localClip, bool opaque,
- const SkPath* casterPerimeter, const Matrix4* transformXY,
- const Matrix4* transformZ, const Vector3& lightCenter, float lightRadius)
- : drawTransform(*drawTransform)
- , localClip(localClip)
- , opaque(opaque)
- , casterPerimeter(*casterPerimeter)
- , transformXY(*transformXY)
- , transformZ(*transformZ)
- , lightCenter(lightCenter)
- , lightRadius(lightRadius) {}
-
- /* Note - we deep copy all task parameters, because *even though* pointers into Allocator
- * controlled objects (like the SkPath and Matrix4s) should be safe for the entire frame,
- * certain Allocators are destroyed before trim() is called to flush incomplete tasks.
- *
- * These deep copies could be avoided, long term, by canceling or flushing outstanding
- * tasks before tearing down single-frame LinearAllocators.
- */
- const Matrix4 drawTransform;
- const Rect localClip;
- bool opaque;
- const SkPath casterPerimeter;
- const Matrix4 transformXY;
- const Matrix4 transformZ;
- const Vector3 lightCenter;
- const float lightRadius;
- VertexBuffer ambientBuffer;
- VertexBuffer spotBuffer;
- };
-
- TessellationCache();
- ~TessellationCache();
-
- /**
- * Clears the cache. This causes all TessellationBuffers to be deleted.
- */
- void clear();
- /**
- * Returns the maximum size of the cache in bytes.
- */
- uint32_t getMaxSize();
- /**
- * Returns the current size of the cache in bytes.
- */
- uint32_t getSize();
-
- /**
- * Trims the contents of the cache, removing items until it's under its
- * specified limit.
- *
- * Trimming is used for caches that support pre-caching from a worker
- * thread. During pre-caching the maximum limit of the cache can be
- * exceeded for the duration of the frame. It is therefore required to
- * trim the cache at the end of the frame to keep the total amount of
- * memory used under control.
- *
- * Also removes transient Shadow VertexBuffers, which aren't cached between frames.
- */
- void trim();
-
- // TODO: precache/get for Oval, Lines, Points, etc.
-
- void precacheRoundRect(const Matrix4& transform, const SkPaint& paint, float width,
- float height, float rx, float ry) {
- getRoundRectBuffer(transform, paint, width, height, rx, ry);
- }
- const VertexBuffer* getRoundRect(const Matrix4& transform, const SkPaint& paint, float width,
- float height, float rx, float ry);
-
- sp<ShadowTask> getShadowTask(const Matrix4* drawTransform, const Rect& localClip, bool opaque,
- const SkPath* casterPerimeter, const Matrix4* transformXY,
- const Matrix4* transformZ, const Vector3& lightCenter,
- float lightRadius);
-
-private:
- class Buffer;
- class TessellationTask;
- class TessellationProcessor;
-
- typedef VertexBuffer* (*Tessellator)(const Description&);
-
- void precacheShadows(const Matrix4* drawTransform, const Rect& localClip, bool opaque,
- const SkPath* casterPerimeter, const Matrix4* transformXY,
- const Matrix4* transformZ, const Vector3& lightCenter, float lightRadius);
-
- Buffer* getRectBuffer(const Matrix4& transform, const SkPaint& paint, float width,
- float height);
- Buffer* getRoundRectBuffer(const Matrix4& transform, const SkPaint& paint, float width,
- float height, float rx, float ry);
-
- Buffer* getOrCreateBuffer(const Description& entry, Tessellator tessellator);
-
- const uint32_t mMaxSize;
-
- bool mDebugEnabled;
-
- mutable Mutex mLock;
-
- ///////////////////////////////////////////////////////////////////////////////
- // General tessellation caching
- ///////////////////////////////////////////////////////////////////////////////
- sp<TaskProcessor<VertexBuffer*> > mProcessor;
- LruCache<Description, Buffer*> mCache;
- class BufferRemovedListener : public OnEntryRemoved<Description, Buffer*> {
- void operator()(Description& description, Buffer*& buffer) override;
- };
- BufferRemovedListener mBufferRemovedListener;
-
- ///////////////////////////////////////////////////////////////////////////////
- // Shadow tessellation caching
- ///////////////////////////////////////////////////////////////////////////////
- sp<TaskProcessor<vertexBuffer_pair_t> > mShadowProcessor;
-
- // holds a pointer, and implicit strong ref to each shadow task of the frame
- LruCache<ShadowDescription, Task<vertexBuffer_pair_t>*> mShadowCache;
- class BufferPairRemovedListener
- : public OnEntryRemoved<ShadowDescription, Task<vertexBuffer_pair_t>*> {
- void operator()(ShadowDescription& description,
- Task<vertexBuffer_pair_t>*& bufferPairTask) override {
- bufferPairTask->decStrong(nullptr);
- }
- };
- BufferPairRemovedListener mBufferPairRemovedListener;
-
-}; // class TessellationCache
-
-void tessellateShadows(const Matrix4* drawTransform, const Rect* localClip, bool isCasterOpaque,
- const SkPath* casterPerimeter, const Matrix4* casterTransformXY,
- const Matrix4* casterTransformZ, const Vector3& lightCenter,
- float lightRadius, VertexBuffer& ambientBuffer, VertexBuffer& spotBuffer);
-
-}; // namespace uirenderer
-}; // namespace android