diff options
Diffstat (limited to 'libs/hwui')
| -rw-r--r-- | libs/hwui/DisplayListRenderer.cpp | 2 | ||||
| -rw-r--r-- | libs/hwui/DisplayListRenderer.h | 3 | ||||
| -rw-r--r-- | libs/hwui/ShadowTessellator.cpp | 1 | ||||
| -rw-r--r-- | libs/hwui/TessellationCache.cpp | 1 | ||||
| -rw-r--r-- | libs/hwui/thread/Signal.h | 6 | ||||
| -rw-r--r-- | libs/hwui/thread/TaskManager.cpp | 7 |
6 files changed, 14 insertions, 6 deletions
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp index 2a673f4..8757e15 100644 --- a/libs/hwui/DisplayListRenderer.cpp +++ b/libs/hwui/DisplayListRenderer.cpp @@ -484,7 +484,7 @@ void DisplayListRenderer::drawRects(const float* rects, int count, const SkPaint } void DisplayListRenderer::setDrawFilter(SkDrawFilter* filter) { - mDrawFilter.reset(filter); + mDrawFilter.reset(SkSafeRef(filter)); } void DisplayListRenderer::insertReorderBarrier(bool enableReorder) { diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h index 48ecd69..53fd1ad 100644 --- a/libs/hwui/DisplayListRenderer.h +++ b/libs/hwui/DisplayListRenderer.h @@ -296,8 +296,9 @@ private: // so that we don't need to modify the paint every time we access it. SkTLazy<SkPaint> filteredPaint; if (mDrawFilter.get()) { - paint = filteredPaint.init(); + filteredPaint.set(*paint); mDrawFilter->filter(filteredPaint.get(), SkDrawFilter::kPaint_Type); + paint = filteredPaint.get(); } // compute the hash key for the paint and check the cache. diff --git a/libs/hwui/ShadowTessellator.cpp b/libs/hwui/ShadowTessellator.cpp index 9509c48..30d3f41 100644 --- a/libs/hwui/ShadowTessellator.cpp +++ b/libs/hwui/ShadowTessellator.cpp @@ -197,6 +197,7 @@ bool ShadowTessellator::isClockwisePath(const SkPath& path) { case SkPath::kLine_Verb: arrayForDirection.add((Vector2){pts[1].x(), pts[1].y()}); break; + case SkPath::kConic_Verb: case SkPath::kQuad_Verb: arrayForDirection.add((Vector2){pts[1].x(), pts[1].y()}); arrayForDirection.add((Vector2){pts[2].x(), pts[2].y()}); diff --git a/libs/hwui/TessellationCache.cpp b/libs/hwui/TessellationCache.cpp index 66de333..d9d06bf 100644 --- a/libs/hwui/TessellationCache.cpp +++ b/libs/hwui/TessellationCache.cpp @@ -380,6 +380,7 @@ void TessellationCache::precacheShadows(const Matrix4* drawTransform, const Rect const Vector3& lightCenter, float lightRadius) { ShadowDescription key(casterPerimeter, drawTransform); + if (mShadowCache.get(key)) return; sp<ShadowTask> task = new ShadowTask(drawTransform, localClip, opaque, casterPerimeter, transformXY, transformZ, lightCenter, lightRadius); if (mShadowProcessor == nullptr) { diff --git a/libs/hwui/thread/Signal.h b/libs/hwui/thread/Signal.h index dcf5449..d4cfeeb 100644 --- a/libs/hwui/thread/Signal.h +++ b/libs/hwui/thread/Signal.h @@ -30,8 +30,10 @@ public: ~Signal() { } void signal() { - Mutex::Autolock l(mLock); - mSignaled = true; + { + Mutex::Autolock l(mLock); + mSignaled = true; + } mCondition.signal(mType); } diff --git a/libs/hwui/thread/TaskManager.cpp b/libs/hwui/thread/TaskManager.cpp index c69b2fd..f0ed0bb 100644 --- a/libs/hwui/thread/TaskManager.cpp +++ b/libs/hwui/thread/TaskManager.cpp @@ -109,8 +109,11 @@ bool TaskManager::WorkerThread::addTask(TaskWrapper task) { return false; } - Mutex::Autolock l(mLock); - ssize_t index = mTasks.add(task); + ssize_t index; + { + Mutex::Autolock l(mLock); + index = mTasks.add(task); + } mSignal.signal(); return index >= 0; |
