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

Side by Side Diff: src/core/SkPictureRecord.cpp

Issue 1409373011: Dedup SkPaths by gen-ID when going to .skp (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: comment Created 5 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « src/core/SkPictureRecord.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkPictureRecord.h" 8 #include "SkPictureRecord.h"
9 #include "SkDevice.h" 9 #include "SkDevice.h"
10 #include "SkImage_Base.h" 10 #include "SkImage_Base.h"
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 } 580 }
581 581
582 void SkPictureRecord::onDrawImageRect(const SkImage* image, const SkRect* src, c onst SkRect& dst, 582 void SkPictureRecord::onDrawImageRect(const SkImage* image, const SkRect* src, c onst SkRect& dst,
583 const SkPaint* paint, SrcRectConstraint co nstraint) { 583 const SkPaint* paint, SrcRectConstraint co nstraint) {
584 // id + paint_index + image_index + bool_for_src + constraint 584 // id + paint_index + image_index + bool_for_src + constraint
585 size_t size = 5 * kUInt32Size; 585 size_t size = 5 * kUInt32Size;
586 if (src) { 586 if (src) {
587 size += sizeof(*src); // + rect 587 size += sizeof(*src); // + rect
588 } 588 }
589 size += sizeof(dst); // + rect 589 size += sizeof(dst); // + rect
590 590
591 size_t initialOffset = this->addDraw(DRAW_IMAGE_RECT, &size); 591 size_t initialOffset = this->addDraw(DRAW_IMAGE_RECT, &size);
592 SkASSERT(initialOffset+get_paint_offset(DRAW_IMAGE_RECT, size) 592 SkASSERT(initialOffset+get_paint_offset(DRAW_IMAGE_RECT, size)
593 == fWriter.bytesWritten()); 593 == fWriter.bytesWritten());
594 this->addPaintPtr(paint); 594 this->addPaintPtr(paint);
595 this->addImage(image); 595 this->addImage(image);
596 this->addRectPtr(src); // may be null 596 this->addRectPtr(src); // may be null
597 this->addRect(dst); 597 this->addRect(dst);
598 this->addInt(constraint); 598 this->addInt(constraint);
599 this->validate(initialOffset, size); 599 this->validate(initialOffset, size);
600 } 600 }
601 601
602 void SkPictureRecord::onDrawImageNine(const SkImage* img, const SkIRect& center, const SkRect& dst, 602 void SkPictureRecord::onDrawImageNine(const SkImage* img, const SkIRect& center, const SkRect& dst,
603 const SkPaint* paint) { 603 const SkPaint* paint) {
604 // id + paint_index + image_index + center + dst 604 // id + paint_index + image_index + center + dst
605 size_t size = 3 * kUInt32Size + sizeof(SkIRect) + sizeof(SkRect); 605 size_t size = 3 * kUInt32Size + sizeof(SkIRect) + sizeof(SkRect);
606 606
607 size_t initialOffset = this->addDraw(DRAW_IMAGE_NINE, &size); 607 size_t initialOffset = this->addDraw(DRAW_IMAGE_NINE, &size);
608 SkASSERT(initialOffset+get_paint_offset(DRAW_IMAGE_NINE, size) == fWriter.by tesWritten()); 608 SkASSERT(initialOffset+get_paint_offset(DRAW_IMAGE_NINE, size) == fWriter.by tesWritten());
609 this->addPaintPtr(paint); 609 this->addPaintPtr(paint);
610 this->addImage(img); 610 this->addImage(img);
611 this->addIRect(center); 611 this->addIRect(center);
612 this->addRect(dst); 612 this->addRect(dst);
613 this->validate(initialOffset, size); 613 this->validate(initialOffset, size);
614 } 614 }
615 615
616 void SkPictureRecord::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& ce nter, 616 void SkPictureRecord::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& ce nter,
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 uint32_t flags = 0; 856 uint32_t flags = 0;
857 if (colors) { 857 if (colors) {
858 flags |= DRAW_ATLAS_HAS_COLORS; 858 flags |= DRAW_ATLAS_HAS_COLORS;
859 size += count * sizeof(SkColor); 859 size += count * sizeof(SkColor);
860 size += sizeof(uint32_t); // xfermode::mode 860 size += sizeof(uint32_t); // xfermode::mode
861 } 861 }
862 if (cull) { 862 if (cull) {
863 flags |= DRAW_ATLAS_HAS_CULL; 863 flags |= DRAW_ATLAS_HAS_CULL;
864 size += sizeof(SkRect); 864 size += sizeof(SkRect);
865 } 865 }
866 866
867 size_t initialOffset = this->addDraw(DRAW_ATLAS, &size); 867 size_t initialOffset = this->addDraw(DRAW_ATLAS, &size);
868 SkASSERT(initialOffset+get_paint_offset(DRAW_ATLAS, size) == fWriter.bytesWr itten()); 868 SkASSERT(initialOffset+get_paint_offset(DRAW_ATLAS, size) == fWriter.bytesWr itten());
869 this->addPaintPtr(paint); 869 this->addPaintPtr(paint);
870 this->addImage(atlas); 870 this->addImage(atlas);
871 this->addInt(flags); 871 this->addInt(flags);
872 this->addInt(count); 872 this->addInt(count);
873 fWriter.write(xform, count * sizeof(SkRSXform)); 873 fWriter.write(xform, count * sizeof(SkRSXform));
874 fWriter.write(tex, count * sizeof(SkRect)); 874 fWriter.write(tex, count * sizeof(SkRect));
875 875
876 // write optional parameters 876 // write optional parameters
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 980
981 if (paint) { 981 if (paint) {
982 fPaints.push_back(*paint); 982 fPaints.push_back(*paint);
983 this->addInt(fPaints.count()); 983 this->addInt(fPaints.count());
984 } else { 984 } else {
985 this->addInt(0); 985 this->addInt(0);
986 } 986 }
987 } 987 }
988 988
989 int SkPictureRecord::addPathToHeap(const SkPath& path) { 989 int SkPictureRecord::addPathToHeap(const SkPath& path) {
990 fPaths.push_back(path); 990 if (int* n = fPaths.find(path)) {
991 return fPaths.count(); 991 return *n;
992 }
993 int n = fPaths.count() + 1; // 0 is reserved for null / error.
994 fPaths.set(path, n);
995 return n;
992 } 996 }
993 997
994 void SkPictureRecord::addPath(const SkPath& path) { 998 void SkPictureRecord::addPath(const SkPath& path) {
995 this->addInt(this->addPathToHeap(path)); 999 this->addInt(this->addPathToHeap(path));
996 } 1000 }
997 1001
998 void SkPictureRecord::addPatch(const SkPoint cubics[12]) { 1002 void SkPictureRecord::addPatch(const SkPoint cubics[12]) {
999 fWriter.write(cubics, SkPatchUtils::kNumCtrlPts * sizeof(SkPoint)); 1003 fWriter.write(cubics, SkPatchUtils::kNumCtrlPts * sizeof(SkPoint));
1000 } 1004 }
1001 1005
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1060 void SkPictureRecord::addTextBlob(const SkTextBlob *blob) { 1064 void SkPictureRecord::addTextBlob(const SkTextBlob *blob) {
1061 int index = fTextBlobRefs.count(); 1065 int index = fTextBlobRefs.count();
1062 *fTextBlobRefs.append() = blob; 1066 *fTextBlobRefs.append() = blob;
1063 blob->ref(); 1067 blob->ref();
1064 // follow the convention of recording a 1-based index 1068 // follow the convention of recording a 1-based index
1065 this->addInt(index + 1); 1069 this->addInt(index + 1);
1066 } 1070 }
1067 1071
1068 /////////////////////////////////////////////////////////////////////////////// 1072 ///////////////////////////////////////////////////////////////////////////////
1069 1073
OLDNEW
« no previous file with comments | « src/core/SkPictureRecord.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698