DisplayListRenderer.h revision 4aa90573bbf86db0d33a3a790c5dbd0d93b95cfe
14aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/* 24aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Copyright (C) 2010 The Android Open Source Project 34aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 44aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 54aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * you may not use this file except in compliance with the License. 64aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * You may obtain a copy of the License at 74aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 84aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 94aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Unless required by applicable law or agreed to in writing, software 114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * See the License for the specific language governing permissions and 144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * limitations under the License. 154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy */ 164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#ifndef ANDROID_UI_DISPLAY_LIST_RENDERER_H 184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#define ANDROID_UI_DISPLAY_LIST_RENDERER_H 194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkChunkAlloc.h> 214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkFlattenable.h> 224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkMatrix.h> 234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkPaint.h> 244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkPath.h> 254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkPictureFlat.h> 264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkRefCnt.h> 274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkTDArray.h> 284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkTSearch.h> 294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include "OpenGLRenderer.h" 314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace android { 334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace uirenderer { 344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Defines 374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#define MIN_WRITER_SIZE 16384 404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#define HEAP_BLOCK_SIZE 4096 414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Helpers 444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyclass PathHeap: public SkRefCnt { 474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guypublic: 484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy PathHeap(): mHeap(64 * sizeof(SkPath)) { 494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy }; 504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy PathHeap(SkFlattenableReadBuffer& buffer): mHeap(64 * sizeof(SkPath)) { 524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int count = buffer.readS32(); 534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPaths.setCount(count); 554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkPath** ptr = mPaths.begin(); 564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkPath* p = (SkPath*) mHeap.allocThrow(count * sizeof(SkPath)); 574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy for (int i = 0; i < count; i++) { 594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy new (p) SkPath; 604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy p->unflatten(buffer); 614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy *ptr++ = p; 624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy p++; 634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ~PathHeap() { 674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkPath** iter = mPaths.begin(); 684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkPath** stop = mPaths.end(); 694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy while (iter < stop) { 704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy (*iter)->~SkPath(); 714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy iter++; 724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int append(const SkPath& path) { 764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkPath* p = (SkPath*) mHeap.allocThrow(sizeof(SkPath)); 774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy new (p) SkPath(path); 784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy *mPaths.append() = p; 794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return mPaths.count(); 804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int count() const { return mPaths.count(); } 834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy const SkPath& operator[](int index) const { 854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return *mPaths[index]; 864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void flatten(SkFlattenableWriteBuffer& buffer) const { 894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int count = mPaths.count(); 904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy buffer.write32(count); 924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkPath** iter = mPaths.begin(); 934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkPath** stop = mPaths.end(); 944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy while (iter < stop) { 954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy (*iter)->flatten(buffer); 964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy iter++; 974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyprivate: 1014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkChunkAlloc mHeap; 1024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkTDArray<SkPath*> mPaths; 1034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; 1044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 1064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Renderer 1074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 1084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/** 1104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Records drawing commands in a display list for latter playback. 1114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy */ 1124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyclass DisplayListRenderer: public OpenGLRenderer { 1134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guypublic: 1144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DisplayListRenderer(); 1154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ~DisplayListRenderer(); 1164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy enum Op { 1184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy AcquireContext, 1194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ReleaseContext, 1204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Save, 1214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Restore, 1224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy RestoreToCount, 1234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SaveLayer, 1244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SaveLayerAlpha, 1254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Translate, 1264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Rotate, 1274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Scale, 1284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetMatrix, 1294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ConcatMatrix, 1304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ClipRect, 1314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmap, 1324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmapMatrix, 1334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmapRect, 1344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawPatch, 1354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawColor, 1364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawRect, 1374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawPath, 1384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawLines, 1394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawText, 1404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetShader, 1414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetupShader, 1424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetColorFilter, 1434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetupColorFilter, 1444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetShadow, 1454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetupShadow 1464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy }; 1474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void acquireContext(); 1494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void releaseContext(); 1504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int save(int flags); 1524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void restore(); 1534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void restoreToCount(int saveCount); 1544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int saveLayer(float left, float top, float right, float bottom, 1564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy const SkPaint* p, int flags); 1574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void translate(float dx, float dy); 1594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void rotate(float degrees); 1604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void scale(float sx, float sy); 1614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setMatrix(SkMatrix* matrix); 1634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void concatMatrix(SkMatrix* matrix); 1644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op); 1664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawBitmap(SkBitmap* bitmap, float left, float top, const SkPaint* paint); 1684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawBitmap(SkBitmap* bitmap, const SkMatrix* matrix, const SkPaint* paint); 1694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 1704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 1714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float dstRight, float dstBottom, const SkPaint* paint); 1724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 1734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy uint32_t width, uint32_t height, float left, float top, float right, float bottom, 1744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy const SkPaint* paint); 1754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawColor(int color, SkXfermode::Mode mode); 1764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawRect(float left, float top, float right, float bottom, const SkPaint* paint); 1774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawPath(SkPath* path, SkPaint* paint); 1784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawLines(float* points, int count, const SkPaint* paint); 1794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawText(const char* text, int bytesCount, int count, float x, float y, SkPaint* paint); 1804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetShader(); 1824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupShader(SkiaShader* shader); 1834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetColorFilter(); 1854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupColorFilter(SkiaColorFilter* filter); 1864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetShadow(); 1884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupShadow(float radius, float dx, float dy, int color); 1894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void reset(); 1914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyprivate: 1934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addOp(Op drawOp) { 1944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(drawOp); 1954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 1964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addInt(int value) { 1984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(value); 1994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void addInts(const int32_t* values, uint32_t count) { 2024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy for (uint32_t i = 0; i < count; i++) { 2034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(values[i]); 2044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addFloat(float value) { 2084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(value); 2094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void addFloats(const float* values, int count) { 2124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy for (int i = 0; i < count; i++) { 2134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(values[i]); 2144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addPoint(float x, float y) { 2184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(x); 2194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(y); 2204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addBounds(float left, float top, float right, float bottom) { 2234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(left); 2244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(top); 2254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(right); 2264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(bottom); 2274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addText(const void* text, size_t byteLength) { 2304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(byteLength); 2314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writePad(text, byteLength); 2324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addPath(const SkPath* path) { 2354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (mPathHeap == NULL) { 2364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = new PathHeap(); 2374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mPathHeap->append(*path)); 2394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int find(SkTDArray<const SkFlatPaint*>& paints, const SkPaint* paint); 2424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addPaint(const SkPaint* paint) { 2444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(find(mPaints, paint)); 2454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int find(SkTDArray<const SkFlatMatrix*>& matrices, const SkMatrix* matrix); 2484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addMatrix(const SkMatrix* matrix) { 2504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(find(mMatrices, matrix)); 2514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int find(SkTDArray<const SkFlatBitmap*>& bitmaps, const SkBitmap& bitmap); 2544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addBitmap(const SkBitmap* bitmap) { 2564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(find(mBitmaps, *bitmap)); 2574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkChunkAlloc mHeap; 2604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int mBitmapIndex; 2624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkTDArray<const SkFlatBitmap*> mBitmaps; 2634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int mMatrixIndex; 2654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkTDArray<const SkFlatMatrix*> mMatrices; 2664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int mPaintIndex; 2684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkTDArray<const SkFlatPaint*> mPaints; 2694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy PathHeap* mPathHeap; 2714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkWriter32 mWriter; 2724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRefCntRecorder mRCRecorder; 2744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRefCntRecorder mTFRecorder; 2754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // class DisplayListRenderer 2774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 2794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 2804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#endif // ANDROID_UI_DISPLAY_LIST_RENDERER_H 282