Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(990)

Unified Diff: skia/picture/SkPictureRecord.cpp

Issue 113827: Remove the remainder of the skia source code from the Chromium repo.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « skia/picture/SkPictureRecord.h ('k') | skia/ports/SkFontHost_FONTPATH.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: skia/picture/SkPictureRecord.cpp
===================================================================
--- skia/picture/SkPictureRecord.cpp (revision 16859)
+++ skia/picture/SkPictureRecord.cpp (working copy)
@@ -1,698 +0,0 @@
-#include "SkPictureRecord.h"
-#include "SkTSearch.h"
-
-#define MIN_WRITER_SIZE 16384
-#define HEAP_BLOCK_SIZE 4096
-
-SkPictureRecord::SkPictureRecord() :
- fHeap(HEAP_BLOCK_SIZE), fWriter(MIN_WRITER_SIZE) {
- fBitmapIndex = fMatrixIndex = fPaintIndex = fRegionIndex = 1;
-#ifdef SK_DEBUG_SIZE
- fPointBytes = fRectBytes = fTextBytes = 0;
- fPointWrites = fRectWrites = fTextWrites = 0;
-#endif
-
- fRestoreOffsetStack.setReserve(32);
- fRestoreOffsetStack.push(0);
-
- fPathHeap = NULL; // lazy allocate
-}
-
-SkPictureRecord::~SkPictureRecord() {
- reset();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-int SkPictureRecord::save(SaveFlags flags) {
- addDraw(SAVE);
- addInt(flags);
-
- fRestoreOffsetStack.push(0);
-
- validate();
- return this->INHERITED::save(flags);
-}
-
-int SkPictureRecord::saveLayer(const SkRect* bounds, const SkPaint* paint,
- SaveFlags flags) {
- addDraw(SAVE_LAYER);
- addRectPtr(bounds);
- addPaintPtr(paint);
- addInt(flags);
-
- fRestoreOffsetStack.push(0);
-
- validate();
- return this->INHERITED::saveLayer(bounds, paint, flags);
-}
-
-void SkPictureRecord::restore() {
-
- // patch up the clip offsets
- {
- uint32_t restoreOffset = (uint32_t)fWriter.size();
- uint32_t offset = fRestoreOffsetStack.top();
- while (offset) {
- uint32_t* peek = fWriter.peek32(offset);
- offset = *peek;
- *peek = restoreOffset;
- }
- fRestoreOffsetStack.pop();
- }
-
- addDraw(RESTORE);
- validate();
- return this->INHERITED::restore();
-}
-
-bool SkPictureRecord::translate(SkScalar dx, SkScalar dy) {
- addDraw(TRANSLATE);
- addScalar(dx);
- addScalar(dy);
- validate();
- return this->INHERITED::translate(dx, dy);
-}
-
-bool SkPictureRecord::scale(SkScalar sx, SkScalar sy) {
- addDraw(SCALE);
- addScalar(sx);
- addScalar(sy);
- validate();
- return this->INHERITED::scale(sx, sy);
-}
-
-bool SkPictureRecord::rotate(SkScalar degrees) {
- addDraw(ROTATE);
- addScalar(degrees);
- validate();
- return this->INHERITED::rotate(degrees);
-}
-
-bool SkPictureRecord::skew(SkScalar sx, SkScalar sy) {
- addDraw(SKEW);
- addScalar(sx);
- addScalar(sy);
- validate();
- return this->INHERITED::skew(sx, sy);
-}
-
-bool SkPictureRecord::concat(const SkMatrix& matrix) {
- validate();
- addDraw(CONCAT);
- addMatrix(matrix);
- validate();
- return this->INHERITED::concat(matrix);
-}
-
-bool SkPictureRecord::clipRect(const SkRect& rect, SkRegion::Op op) {
- addDraw(CLIP_RECT);
- addRect(rect);
- addInt(op);
-
- size_t offset = fWriter.size();
- addInt(fRestoreOffsetStack.top());
- fRestoreOffsetStack.top() = offset;
-
- validate();
- return this->INHERITED::clipRect(rect, op);
-}
-
-bool SkPictureRecord::clipPath(const SkPath& path, SkRegion::Op op) {
- addDraw(CLIP_PATH);
- addPath(path);
- addInt(op);
-
- size_t offset = fWriter.size();
- addInt(fRestoreOffsetStack.top());
- fRestoreOffsetStack.top() = offset;
-
- validate();
- return this->INHERITED::clipPath(path, op);
-}
-
-bool SkPictureRecord::clipRegion(const SkRegion& region, SkRegion::Op op) {
- addDraw(CLIP_REGION);
- addRegion(region);
- addInt(op);
-
- size_t offset = fWriter.size();
- addInt(fRestoreOffsetStack.top());
- fRestoreOffsetStack.top() = offset;
-
- validate();
- return this->INHERITED::clipRegion(region, op);
-}
-
-void SkPictureRecord::drawPaint(const SkPaint& paint) {
- addDraw(DRAW_PAINT);
- addPaint(paint);
- validate();
-}
-
-void SkPictureRecord::drawPoints(PointMode mode, size_t count, const SkPoint pts[],
- const SkPaint& paint) {
- addDraw(DRAW_POINTS);
- addPaint(paint);
- addInt(mode);
- addInt(count);
- fWriter.writeMul4(pts, count * sizeof(SkPoint));
- validate();
-}
-
-void SkPictureRecord::drawRect(const SkRect& rect, const SkPaint& paint) {
- addDraw(DRAW_RECT);
- addPaint(paint);
- addRect(rect);
- validate();
-}
-
-void SkPictureRecord::drawPath(const SkPath& path, const SkPaint& paint) {
- addDraw(DRAW_PATH);
- addPaint(paint);
- addPath(path);
- validate();
-}
-
-void SkPictureRecord::drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
- const SkPaint* paint = NULL) {
- addDraw(DRAW_BITMAP);
- addPaintPtr(paint);
- addBitmap(bitmap);
- addScalar(left);
- addScalar(top);
- validate();
-}
-
-void SkPictureRecord::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
- const SkRect& dst, const SkPaint* paint) {
- addDraw(DRAW_BITMAP_RECT);
- addPaintPtr(paint);
- addBitmap(bitmap);
- addIRectPtr(src); // may be null
- addRect(dst);
- validate();
-}
-
-void SkPictureRecord::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& matrix,
- const SkPaint* paint) {
- addDraw(DRAW_BITMAP_MATRIX);
- addPaintPtr(paint);
- addBitmap(bitmap);
- addMatrix(matrix);
- validate();
-}
-
-void SkPictureRecord::drawSprite(const SkBitmap& bitmap, int left, int top,
- const SkPaint* paint = NULL) {
- addDraw(DRAW_SPRITE);
- addPaintPtr(paint);
- addBitmap(bitmap);
- addInt(left);
- addInt(top);
- validate();
-}
-
-void SkPictureRecord::addFontMetricsTopBottom(const SkPaint& paint,
- SkScalar baselineY) {
- SkPaint::FontMetrics metrics;
- paint.getFontMetrics(&metrics);
- SkRect bounds;
- // construct a rect so we can see any adjustments from the paint.
- // we use 0,1 for left,right, just so the rect isn't empty
- bounds.set(0, metrics.fTop + baselineY,
- SK_Scalar1, metrics.fBottom + baselineY);
- (void)paint.computeFastBounds(bounds, &bounds);
- // now record the top and bottom
- addScalar(bounds.fTop);
- addScalar(bounds.fBottom);
-}
-
-void SkPictureRecord::drawText(const void* text, size_t byteLength, SkScalar x,
- SkScalar y, const SkPaint& paint) {
- bool fast = paint.canComputeFastBounds();
-
- addDraw(fast ? DRAW_TEXT_TOP_BOTTOM : DRAW_TEXT);
- addPaint(paint);
- addText(text, byteLength);
- addScalar(x);
- addScalar(y);
- if (fast) {
- addFontMetricsTopBottom(paint, y);
- }
- validate();
-}
-
-void SkPictureRecord::drawPosText(const void* text, size_t byteLength,
- const SkPoint pos[], const SkPaint& paint) {
- size_t points = paint.countText(text, byteLength);
- if (0 == points)
- return;
-
- bool canUseDrawH = true;
- // check if the caller really should have used drawPosTextH()
- {
- const SkScalar firstY = pos[0].fY;
- for (size_t index = 1; index < points; index++) {
- if (pos[index].fY != firstY) {
- canUseDrawH = false;
- break;
- }
- }
- }
-
- bool fast = canUseDrawH && paint.canComputeFastBounds();
-
- if (fast) {
- addDraw(DRAW_POS_TEXT_H_TOP_BOTTOM);
- } else {
- addDraw(canUseDrawH ? DRAW_POS_TEXT_H : DRAW_POS_TEXT);
- }
- addPaint(paint);
- addText(text, byteLength);
- addInt(points);
-
-#ifdef SK_DEBUG_SIZE
- size_t start = fWriter.size();
-#endif
- if (canUseDrawH) {
- if (fast) {
- addFontMetricsTopBottom(paint, pos[0].fY);
- }
- addScalar(pos[0].fY);
- SkScalar* xptr = (SkScalar*)fWriter.reserve(points * sizeof(SkScalar));
- for (size_t index = 0; index < points; index++)
- *xptr++ = pos[index].fX;
- }
- else {
- fWriter.writeMul4(pos, points * sizeof(SkPoint));
- }
-#ifdef SK_DEBUG_SIZE
- fPointBytes += fWriter.size() - start;
- fPointWrites += points;
-#endif
- validate();
-}
-
-void SkPictureRecord::drawPosTextH(const void* text, size_t byteLength,
- const SkScalar xpos[], SkScalar constY,
- const SkPaint& paint) {
- size_t points = paint.countText(text, byteLength);
- if (0 == points)
- return;
-
- bool fast = paint.canComputeFastBounds();
-
- addDraw(fast ? DRAW_POS_TEXT_H_TOP_BOTTOM : DRAW_POS_TEXT_H);
- addPaint(paint);
- addText(text, byteLength);
- addInt(points);
-
-#ifdef SK_DEBUG_SIZE
- size_t start = fWriter.size();
-#endif
- if (fast) {
- addFontMetricsTopBottom(paint, constY);
- }
- addScalar(constY);
- fWriter.writeMul4(xpos, points * sizeof(SkScalar));
-#ifdef SK_DEBUG_SIZE
- fPointBytes += fWriter.size() - start;
- fPointWrites += points;
-#endif
- validate();
-}
-
-void SkPictureRecord::drawTextOnPath(const void* text, size_t byteLength,
- const SkPath& path, const SkMatrix* matrix,
- const SkPaint& paint) {
- addDraw(DRAW_TEXT_ON_PATH);
- addPaint(paint);
- addText(text, byteLength);
- addPath(path);
- addMatrixPtr(matrix);
- validate();
-}
-
-void SkPictureRecord::drawPicture(SkPicture& picture) {
- addDraw(DRAW_PICTURE);
- addPicture(picture);
- validate();
-}
-
-void SkPictureRecord::drawVertices(VertexMode vmode, int vertexCount,
- const SkPoint vertices[], const SkPoint texs[],
- const SkColor colors[], SkXfermode*,
- const uint16_t indices[], int indexCount,
- const SkPaint& paint) {
- uint32_t flags = 0;
- if (texs) {
- flags |= DRAW_VERTICES_HAS_TEXS;
- }
- if (colors) {
- flags |= DRAW_VERTICES_HAS_COLORS;
- }
- if (indexCount > 0) {
- flags |= DRAW_VERTICES_HAS_INDICES;
- }
-
- addDraw(DRAW_VERTICES);
- addPaint(paint);
- addInt(flags);
- addInt(vmode);
- addInt(vertexCount);
- addPoints(vertices, vertexCount);
- if (flags & DRAW_VERTICES_HAS_TEXS) {
- addPoints(texs, vertexCount);
- }
- if (flags & DRAW_VERTICES_HAS_COLORS) {
- fWriter.writeMul4(colors, vertexCount * sizeof(SkColor));
- }
- if (flags & DRAW_VERTICES_HAS_INDICES) {
- addInt(indexCount);
- fWriter.writePad(indices, indexCount * sizeof(uint16_t));
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-void SkPictureRecord::reset() {
- fPathHeap->safeUnref();
- fPathHeap = NULL;
-
- fBitmaps.reset();
- fMatrices.reset();
- fPaints.reset();
- fPictureRefs.unrefAll();
- fRegions.reset();
- fWriter.reset();
- fHeap.reset();
-
- fRestoreOffsetStack.setCount(1);
- fRestoreOffsetStack.top() = 0;
-
- fRCRecorder.reset();
- fTFRecorder.reset();
-}
-
-void SkPictureRecord::addBitmap(const SkBitmap& bitmap) {
- addInt(find(fBitmaps, bitmap));
-}
-
-void SkPictureRecord::addMatrix(const SkMatrix& matrix) {
- addMatrixPtr(&matrix);
-}
-
-void SkPictureRecord::addMatrixPtr(const SkMatrix* matrix) {
- addInt(find(fMatrices, matrix));
-}
-
-void SkPictureRecord::addPaint(const SkPaint& paint) {
- addPaintPtr(&paint);
-}
-
-void SkPictureRecord::addPaintPtr(const SkPaint* paint) {
- addInt(find(fPaints, paint));
-}
-
-void SkPictureRecord::addPath(const SkPath& path) {
- if (NULL == fPathHeap) {
- fPathHeap = SkNEW(SkPathHeap);
- }
- addInt(fPathHeap->append(path));
-}
-
-void SkPictureRecord::addPicture(SkPicture& picture) {
- int index = fPictureRefs.find(&picture);
- if (index < 0) { // not found
- index = fPictureRefs.count();
- *fPictureRefs.append() = &picture;
- picture.ref();
- }
- // follow the convention of recording a 1-based index
- addInt(index + 1);
-}
-
-void SkPictureRecord::addPoint(const SkPoint& point) {
-#ifdef SK_DEBUG_SIZE
- size_t start = fWriter.size();
-#endif
- fWriter.writePoint(point);
-#ifdef SK_DEBUG_SIZE
- fPointBytes += fWriter.size() - start;
- fPointWrites++;
-#endif
-}
-
-void SkPictureRecord::addPoints(const SkPoint pts[], int count) {
- fWriter.writeMul4(pts, count * sizeof(SkPoint));
-#ifdef SK_DEBUG_SIZE
- fPointBytes += count * sizeof(SkPoint);
- fPointWrites++;
-#endif
-}
-
-void SkPictureRecord::addRect(const SkRect& rect) {
-#ifdef SK_DEBUG_SIZE
- size_t start = fWriter.size();
-#endif
- fWriter.writeRect(rect);
-#ifdef SK_DEBUG_SIZE
- fRectBytes += fWriter.size() - start;
- fRectWrites++;
-#endif
-}
-
-void SkPictureRecord::addRectPtr(const SkRect* rect) {
- if (fWriter.writeBool(rect != NULL)) {
- fWriter.writeRect(*rect);
- }
-}
-
-void SkPictureRecord::addIRectPtr(const SkIRect* rect) {
- if (fWriter.writeBool(rect != NULL)) {
- *(SkIRect*)fWriter.reserve(sizeof(SkIRect)) = *rect;
- }
-}
-
-void SkPictureRecord::addRegion(const SkRegion& region) {
- addInt(find(fRegions, region));
-}
-
-void SkPictureRecord::addText(const void* text, size_t byteLength) {
-#ifdef SK_DEBUG_SIZE
- size_t start = fWriter.size();
-#endif
- addInt(byteLength);
- fWriter.writePad(text, byteLength);
-#ifdef SK_DEBUG_SIZE
- fTextBytes += fWriter.size() - start;
- fTextWrites++;
-#endif
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-int SkPictureRecord::find(SkTDArray<const SkFlatBitmap* >& bitmaps, const SkBitmap& bitmap) {
- SkFlatBitmap* flat = SkFlatBitmap::Flatten(&fHeap, bitmap, fBitmapIndex,
- &fRCRecorder);
- int index = SkTSearch<SkFlatData>((const SkFlatData**) bitmaps.begin(),
- bitmaps.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare);
- if (index >= 0) {
-// SkBitmap bitmap;
-// flat->unflatten(&bitmap); // balance ref count
- return bitmaps[index]->index();
- }
- index = ~index;
- *bitmaps.insert(index) = flat;
- return fBitmapIndex++;
-}
-
-int SkPictureRecord::find(SkTDArray<const SkFlatMatrix* >& matrices, const SkMatrix* matrix) {
- if (matrix == NULL)
- return 0;
- SkFlatMatrix* flat = SkFlatMatrix::Flatten(&fHeap, *matrix, fMatrixIndex);
- int index = SkTSearch<SkFlatData>((const SkFlatData**) matrices.begin(),
- matrices.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare);
- if (index >= 0)
- return matrices[index]->index();
- index = ~index;
- *matrices.insert(index) = flat;
- return fMatrixIndex++;
-}
-
-int SkPictureRecord::find(SkTDArray<const SkFlatPaint* >& paints, const SkPaint* paint) {
- if (paint == NULL) {
- return 0;
- }
-
- SkFlatPaint* flat = SkFlatPaint::Flatten(&fHeap, *paint, fPaintIndex,
- &fRCRecorder, &fTFRecorder);
- int index = SkTSearch<SkFlatData>((const SkFlatData**) paints.begin(),
- paints.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare);
- if (index >= 0) {
- return paints[index]->index();
- }
-
- index = ~index;
- *paints.insert(index) = flat;
- return fPaintIndex++;
-}
-
-int SkPictureRecord::find(SkTDArray<const SkFlatRegion* >& regions, const SkRegion& region) {
- SkFlatRegion* flat = SkFlatRegion::Flatten(&fHeap, region, fRegionIndex);
- int index = SkTSearch<SkFlatData>((const SkFlatData**) regions.begin(),
- regions.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare);
- if (index >= 0)
- return regions[index]->index();
- index = ~index;
- *regions.insert(index) = flat;
- return fRegionIndex++;
-}
-
-#ifdef SK_DEBUG_DUMP
-void SkPictureRecord::dumpMatrices() {
- int count = fMatrices.count();
- SkMatrix defaultMatrix;
- defaultMatrix.reset();
- for (int index = 0; index < count; index++) {
- const SkFlatMatrix* flatMatrix = fMatrices[index];
- flatMatrix->dump();
- }
-}
-
-void SkPictureRecord::dumpPaints() {
- int count = fPaints.count();
- for (int index = 0; index < count; index++)
- fPaints[index]->dump();
-}
-#endif
-
-#ifdef SK_DEBUG_SIZE
-size_t SkPictureRecord::size() const {
- size_t result = 0;
- size_t sizeData;
- bitmaps(&sizeData);
- result += sizeData;
- matrices(&sizeData);
- result += sizeData;
- paints(&sizeData);
- result += sizeData;
- paths(&sizeData);
- result += sizeData;
- pictures(&sizeData);
- result += sizeData;
- regions(&sizeData);
- result += sizeData;
- result += streamlen();
- return result;
-}
-
-int SkPictureRecord::bitmaps(size_t* size) const {
- size_t result = 0;
- int count = fBitmaps.count();
- for (int index = 0; index < count; index++)
- result += sizeof(fBitmaps[index]) + fBitmaps[index]->size();
- *size = result;
- return count;
-}
-
-int SkPictureRecord::matrices(size_t* size) const {
- int count = fMatrices.count();
- *size = sizeof(fMatrices[0]) * count;
- return count;
-}
-
-int SkPictureRecord::paints(size_t* size) const {
- size_t result = 0;
- int count = fPaints.count();
- for (int index = 0; index < count; index++)
- result += sizeof(fPaints[index]) + fPaints[index]->size();
- *size = result;
- return count;
-}
-
-int SkPictureRecord::paths(size_t* size) const {
- size_t result = 0;
- int count = fPaths.count();
- for (int index = 0; index < count; index++)
- result += sizeof(fPaths[index]) + fPaths[index]->size();
- *size = result;
- return count;
-}
-
-int SkPictureRecord::regions(size_t* size) const {
- size_t result = 0;
- int count = fRegions.count();
- for (int index = 0; index < count; index++)
- result += sizeof(fRegions[index]) + fRegions[index]->size();
- *size = result;
- return count;
-}
-
-size_t SkPictureRecord::streamlen() const {
- return fWriter.size();
-}
-#endif
-
-#ifdef SK_DEBUG_VALIDATE
-void SkPictureRecord::validate() const {
- validateBitmaps();
- validateMatrices();
- validatePaints();
- validatePaths();
- validatePictures();
- validateRegions();
-}
-
-void SkPictureRecord::validateBitmaps() const {
- int count = fBitmaps.count();
- SkASSERT((unsigned) count < 0x1000);
- for (int index = 0; index < count; index++) {
- const SkFlatBitmap* bitPtr = fBitmaps[index];
- SkASSERT(bitPtr);
- bitPtr->validate();
- }
-}
-
-void SkPictureRecord::validateMatrices() const {
- int count = fMatrices.count();
- SkASSERT((unsigned) count < 0x1000);
- for (int index = 0; index < count; index++) {
- const SkFlatMatrix* matrix = fMatrices[index];
- SkASSERT(matrix);
- matrix->validate();
- }
-}
-
-void SkPictureRecord::validatePaints() const {
- int count = fPaints.count();
- SkASSERT((unsigned) count < 0x1000);
- for (int index = 0; index < count; index++) {
- const SkFlatPaint* paint = fPaints[index];
- SkASSERT(paint);
-// paint->validate();
- }
-}
-
-void SkPictureRecord::validatePaths() const {
- int count = fPaths.count();
- SkASSERT((unsigned) count < 0x1000);
- for (int index = 0; index < count; index++) {
- const SkFlatPath* path = fPaths[index];
- SkASSERT(path);
- path->validate();
- }
-}
-
-void SkPictureRecord::validateRegions() const {
- int count = fRegions.count();
- SkASSERT((unsigned) count < 0x1000);
- for (int index = 0; index < count; index++) {
- const SkFlatRegion* region = fRegions[index];
- SkASSERT(region);
- region->validate();
- }
-}
-#endif
-
« no previous file with comments | « skia/picture/SkPictureRecord.h ('k') | skia/ports/SkFontHost_FONTPATH.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698