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

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

Issue 27343002: Second wave of Win64 warning cleanup (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: switched count_glyphs back to int Created 7 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/core/SkPictureRecord.h ('k') | src/gpu/GrAtlas.h » ('j') | 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 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 #include "SkPictureRecord.h" 8 #include "SkPictureRecord.h"
9 #include "SkTSearch.h" 9 #include "SkTSearch.h"
10 #include "SkPixelRef.h" 10 #include "SkPixelRef.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 return this->INHERITED::setDevice(device); 143 return this->INHERITED::setDevice(device);
144 } 144 }
145 145
146 int SkPictureRecord::save(SaveFlags flags) { 146 int SkPictureRecord::save(SaveFlags flags) {
147 // record the offset to us, making it non-positive to distinguish a save 147 // record the offset to us, making it non-positive to distinguish a save
148 // from a clip entry. 148 // from a clip entry.
149 fRestoreOffsetStack.push(-(int32_t)fWriter.size()); 149 fRestoreOffsetStack.push(-(int32_t)fWriter.size());
150 150
151 // op + flags 151 // op + flags
152 uint32_t size = kSaveSize; 152 uint32_t size = kSaveSize;
153 uint32_t initialOffset = this->addDraw(SAVE, &size); 153 size_t initialOffset = this->addDraw(SAVE, &size);
154 addInt(flags); 154 addInt(flags);
155 155
156 validate(initialOffset, size); 156 this->validate(initialOffset, size);
157 return this->INHERITED::save(flags); 157 return this->INHERITED::save(flags);
158 } 158 }
159 159
160 int SkPictureRecord::saveLayer(const SkRect* bounds, const SkPaint* paint, 160 int SkPictureRecord::saveLayer(const SkRect* bounds, const SkPaint* paint,
161 SaveFlags flags) { 161 SaveFlags flags) {
162 // record the offset to us, making it non-positive to distinguish a save 162 // record the offset to us, making it non-positive to distinguish a save
163 // from a clip entry. 163 // from a clip entry.
164 fRestoreOffsetStack.push(-(int32_t)fWriter.size()); 164 fRestoreOffsetStack.push(-(int32_t)fWriter.size());
165 165
166 // op + bool for 'bounds' 166 // op + bool for 'bounds'
167 uint32_t size = 2 * kUInt32Size; 167 uint32_t size = 2 * kUInt32Size;
168 if (NULL != bounds) { 168 if (NULL != bounds) {
169 size += sizeof(*bounds); // + rect 169 size += sizeof(*bounds); // + rect
170 } 170 }
171 // + paint index + flags 171 // + paint index + flags
172 size += 2 * kUInt32Size; 172 size += 2 * kUInt32Size;
173 173
174 SkASSERT(kSaveLayerNoBoundsSize == size || kSaveLayerWithBoundsSize == size) ; 174 SkASSERT(kSaveLayerNoBoundsSize == size || kSaveLayerWithBoundsSize == size) ;
175 175
176 uint32_t initialOffset = this->addDraw(SAVE_LAYER, &size); 176 size_t initialOffset = this->addDraw(SAVE_LAYER, &size);
177 addRectPtr(bounds); 177 addRectPtr(bounds);
178 SkASSERT(initialOffset+getPaintOffset(SAVE_LAYER, size) == fWriter.size()); 178 SkASSERT(initialOffset+getPaintOffset(SAVE_LAYER, size) == fWriter.size());
179 addPaintPtr(paint); 179 addPaintPtr(paint);
180 addInt(flags); 180 addInt(flags);
181 181
182 if (kNoSavedLayerIndex == fFirstSavedLayerIndex) { 182 if (kNoSavedLayerIndex == fFirstSavedLayerIndex) {
183 fFirstSavedLayerIndex = fRestoreOffsetStack.count(); 183 fFirstSavedLayerIndex = fRestoreOffsetStack.count();
184 } 184 }
185 185
186 validate(initialOffset, size); 186 this->validate(initialOffset, size);
187 /* Don't actually call saveLayer, because that will try to allocate an 187 /* Don't actually call saveLayer, because that will try to allocate an
188 offscreen device (potentially very big) which we don't actually need 188 offscreen device (potentially very big) which we don't actually need
189 at this time (and may not be able to afford since during record our 189 at this time (and may not be able to afford since during record our
190 clip starts out the size of the picture, which is often much larger 190 clip starts out the size of the picture, which is often much larger
191 than the size of the actual device we'll use during playback). 191 than the size of the actual device we'll use during playback).
192 */ 192 */
193 int count = this->INHERITED::save(flags); 193 int count = this->INHERITED::save(flags);
194 this->clipRectBounds(bounds, flags, NULL); 194 this->clipRectBounds(bounds, flags, NULL);
195 return count; 195 return count;
196 } 196 }
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 if ((fRecordFlags & SkPicture::kDisableRecordOptimizations_RecordingFlag) || 596 if ((fRecordFlags & SkPicture::kDisableRecordOptimizations_RecordingFlag) ||
597 SK_ARRAY_COUNT(gPictureRecordOpts) == opt) { 597 SK_ARRAY_COUNT(gPictureRecordOpts) == opt) {
598 // No optimization fired so add the RESTORE 598 // No optimization fired so add the RESTORE
599 fillRestoreOffsetPlaceholdersForCurrentStackLevel((uint32_t)fWriter.size ()); 599 fillRestoreOffsetPlaceholdersForCurrentStackLevel((uint32_t)fWriter.size ());
600 size = 1 * kUInt32Size; // RESTORE consists solely of 1 op code 600 size = 1 * kUInt32Size; // RESTORE consists solely of 1 op code
601 initialOffset = this->addDraw(RESTORE, &size); 601 initialOffset = this->addDraw(RESTORE, &size);
602 } 602 }
603 603
604 fRestoreOffsetStack.pop(); 604 fRestoreOffsetStack.pop();
605 605
606 validate(initialOffset, size); 606 this->validate(initialOffset, size);
607 return this->INHERITED::restore(); 607 return this->INHERITED::restore();
608 } 608 }
609 609
610 bool SkPictureRecord::translate(SkScalar dx, SkScalar dy) { 610 bool SkPictureRecord::translate(SkScalar dx, SkScalar dy) {
611 // op + dx + dy 611 // op + dx + dy
612 uint32_t size = 1 * kUInt32Size + 2 * sizeof(SkScalar); 612 uint32_t size = 1 * kUInt32Size + 2 * sizeof(SkScalar);
613 uint32_t initialOffset = this->addDraw(TRANSLATE, &size); 613 size_t initialOffset = this->addDraw(TRANSLATE, &size);
614 addScalar(dx); 614 addScalar(dx);
615 addScalar(dy); 615 addScalar(dy);
616 validate(initialOffset, size); 616 this->validate(initialOffset, size);
617 return this->INHERITED::translate(dx, dy); 617 return this->INHERITED::translate(dx, dy);
618 } 618 }
619 619
620 bool SkPictureRecord::scale(SkScalar sx, SkScalar sy) { 620 bool SkPictureRecord::scale(SkScalar sx, SkScalar sy) {
621 // op + sx + sy 621 // op + sx + sy
622 uint32_t size = 1 * kUInt32Size + 2 * sizeof(SkScalar); 622 uint32_t size = 1 * kUInt32Size + 2 * sizeof(SkScalar);
623 uint32_t initialOffset = this->addDraw(SCALE, &size); 623 size_t initialOffset = this->addDraw(SCALE, &size);
624 addScalar(sx); 624 addScalar(sx);
625 addScalar(sy); 625 addScalar(sy);
626 validate(initialOffset, size); 626 this->validate(initialOffset, size);
627 return this->INHERITED::scale(sx, sy); 627 return this->INHERITED::scale(sx, sy);
628 } 628 }
629 629
630 bool SkPictureRecord::rotate(SkScalar degrees) { 630 bool SkPictureRecord::rotate(SkScalar degrees) {
631 // op + degrees 631 // op + degrees
632 uint32_t size = 1 * kUInt32Size + sizeof(SkScalar); 632 uint32_t size = 1 * kUInt32Size + sizeof(SkScalar);
633 uint32_t initialOffset = this->addDraw(ROTATE, &size); 633 size_t initialOffset = this->addDraw(ROTATE, &size);
634 addScalar(degrees); 634 addScalar(degrees);
635 validate(initialOffset, size); 635 this->validate(initialOffset, size);
636 return this->INHERITED::rotate(degrees); 636 return this->INHERITED::rotate(degrees);
637 } 637 }
638 638
639 bool SkPictureRecord::skew(SkScalar sx, SkScalar sy) { 639 bool SkPictureRecord::skew(SkScalar sx, SkScalar sy) {
640 // op + sx + sy 640 // op + sx + sy
641 uint32_t size = 1 * kUInt32Size + 2 * sizeof(SkScalar); 641 uint32_t size = 1 * kUInt32Size + 2 * sizeof(SkScalar);
642 uint32_t initialOffset = this->addDraw(SKEW, &size); 642 size_t initialOffset = this->addDraw(SKEW, &size);
643 addScalar(sx); 643 addScalar(sx);
644 addScalar(sy); 644 addScalar(sy);
645 validate(initialOffset, size); 645 this->validate(initialOffset, size);
646 return this->INHERITED::skew(sx, sy); 646 return this->INHERITED::skew(sx, sy);
647 } 647 }
648 648
649 bool SkPictureRecord::concat(const SkMatrix& matrix) { 649 bool SkPictureRecord::concat(const SkMatrix& matrix) {
650 validate(fWriter.size(), 0); 650 this->validate(fWriter.size(), 0);
651 // op + matrix index 651 // op + matrix index
652 uint32_t size = 2 * kUInt32Size; 652 uint32_t size = 2 * kUInt32Size;
653 uint32_t initialOffset = this->addDraw(CONCAT, &size); 653 size_t initialOffset = this->addDraw(CONCAT, &size);
654 addMatrix(matrix); 654 addMatrix(matrix);
655 validate(initialOffset, size); 655 this->validate(initialOffset, size);
656 return this->INHERITED::concat(matrix); 656 return this->INHERITED::concat(matrix);
657 } 657 }
658 658
659 void SkPictureRecord::setMatrix(const SkMatrix& matrix) { 659 void SkPictureRecord::setMatrix(const SkMatrix& matrix) {
660 validate(fWriter.size(), 0); 660 this->validate(fWriter.size(), 0);
661 // op + matrix index 661 // op + matrix index
662 uint32_t size = 2 * kUInt32Size; 662 uint32_t size = 2 * kUInt32Size;
663 uint32_t initialOffset = this->addDraw(SET_MATRIX, &size); 663 size_t initialOffset = this->addDraw(SET_MATRIX, &size);
664 addMatrix(matrix); 664 addMatrix(matrix);
665 validate(initialOffset, size); 665 this->validate(initialOffset, size);
666 this->INHERITED::setMatrix(matrix); 666 this->INHERITED::setMatrix(matrix);
667 } 667 }
668 668
669 static bool regionOpExpands(SkRegion::Op op) { 669 static bool regionOpExpands(SkRegion::Op op) {
670 switch (op) { 670 switch (op) {
671 case SkRegion::kUnion_Op: 671 case SkRegion::kUnion_Op:
672 case SkRegion::kXOR_Op: 672 case SkRegion::kXOR_Op:
673 case SkRegion::kReverseDifference_Op: 673 case SkRegion::kReverseDifference_Op:
674 case SkRegion::kReplace_Op: 674 case SkRegion::kReplace_Op:
675 return true; 675 return true;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 } 740 }
741 741
742 bool SkPictureRecord::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) { 742 bool SkPictureRecord::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) {
743 // id + rect + clip params 743 // id + rect + clip params
744 uint32_t size = 1 * kUInt32Size + sizeof(rect) + 1 * kUInt32Size; 744 uint32_t size = 1 * kUInt32Size + sizeof(rect) + 1 * kUInt32Size;
745 // recordRestoreOffsetPlaceholder doesn't always write an offset 745 // recordRestoreOffsetPlaceholder doesn't always write an offset
746 if (!fRestoreOffsetStack.isEmpty()) { 746 if (!fRestoreOffsetStack.isEmpty()) {
747 // + restore offset 747 // + restore offset
748 size += kUInt32Size; 748 size += kUInt32Size;
749 } 749 }
750 uint32_t initialOffset = this->addDraw(CLIP_RECT, &size); 750 size_t initialOffset = this->addDraw(CLIP_RECT, &size);
751 addRect(rect); 751 addRect(rect);
752 addInt(ClipParams_pack(op, doAA)); 752 addInt(ClipParams_pack(op, doAA));
753 recordRestoreOffsetPlaceholder(op); 753 recordRestoreOffsetPlaceholder(op);
754 754
755 validate(initialOffset, size); 755 this->validate(initialOffset, size);
756 return this->INHERITED::clipRect(rect, op, doAA); 756 return this->INHERITED::clipRect(rect, op, doAA);
757 } 757 }
758 758
759 bool SkPictureRecord::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA ) { 759 bool SkPictureRecord::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA ) {
760 if (rrect.isRect()) { 760 if (rrect.isRect()) {
761 return this->SkPictureRecord::clipRect(rrect.getBounds(), op, doAA); 761 return this->SkPictureRecord::clipRect(rrect.getBounds(), op, doAA);
762 } 762 }
763 763
764 // op + rrect + clip params 764 // op + rrect + clip params
765 uint32_t size = 1 * kUInt32Size + SkRRect::kSizeInMemory + 1 * kUInt32Size; 765 uint32_t size = 1 * kUInt32Size + SkRRect::kSizeInMemory + 1 * kUInt32Size;
766 // recordRestoreOffsetPlaceholder doesn't always write an offset 766 // recordRestoreOffsetPlaceholder doesn't always write an offset
767 if (!fRestoreOffsetStack.isEmpty()) { 767 if (!fRestoreOffsetStack.isEmpty()) {
768 // + restore offset 768 // + restore offset
769 size += kUInt32Size; 769 size += kUInt32Size;
770 } 770 }
771 uint32_t initialOffset = this->addDraw(CLIP_RRECT, &size); 771 size_t initialOffset = this->addDraw(CLIP_RRECT, &size);
772 addRRect(rrect); 772 addRRect(rrect);
773 addInt(ClipParams_pack(op, doAA)); 773 addInt(ClipParams_pack(op, doAA));
774 recordRestoreOffsetPlaceholder(op); 774 recordRestoreOffsetPlaceholder(op);
775 775
776 validate(initialOffset, size); 776 this->validate(initialOffset, size);
777 777
778 if (fRecordFlags & SkPicture::kUsePathBoundsForClip_RecordingFlag) { 778 if (fRecordFlags & SkPicture::kUsePathBoundsForClip_RecordingFlag) {
779 return this->updateClipConservativelyUsingBounds(rrect.getBounds(), op, false); 779 return this->updateClipConservativelyUsingBounds(rrect.getBounds(), op, false);
780 } else { 780 } else {
781 return this->INHERITED::clipRRect(rrect, op, doAA); 781 return this->INHERITED::clipRRect(rrect, op, doAA);
782 } 782 }
783 } 783 }
784 784
785 bool SkPictureRecord::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) { 785 bool SkPictureRecord::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) {
786 786
787 SkRect r; 787 SkRect r;
788 if (!path.isInverseFillType() && path.isRect(&r)) { 788 if (!path.isInverseFillType() && path.isRect(&r)) {
789 return this->clipRect(r, op, doAA); 789 return this->clipRect(r, op, doAA);
790 } 790 }
791 791
792 // op + path index + clip params 792 // op + path index + clip params
793 uint32_t size = 3 * kUInt32Size; 793 uint32_t size = 3 * kUInt32Size;
794 // recordRestoreOffsetPlaceholder doesn't always write an offset 794 // recordRestoreOffsetPlaceholder doesn't always write an offset
795 if (!fRestoreOffsetStack.isEmpty()) { 795 if (!fRestoreOffsetStack.isEmpty()) {
796 // + restore offset 796 // + restore offset
797 size += kUInt32Size; 797 size += kUInt32Size;
798 } 798 }
799 uint32_t initialOffset = this->addDraw(CLIP_PATH, &size); 799 size_t initialOffset = this->addDraw(CLIP_PATH, &size);
800 addPath(path); 800 addPath(path);
801 addInt(ClipParams_pack(op, doAA)); 801 addInt(ClipParams_pack(op, doAA));
802 recordRestoreOffsetPlaceholder(op); 802 recordRestoreOffsetPlaceholder(op);
803 803
804 validate(initialOffset, size); 804 this->validate(initialOffset, size);
805 805
806 if (fRecordFlags & SkPicture::kUsePathBoundsForClip_RecordingFlag) { 806 if (fRecordFlags & SkPicture::kUsePathBoundsForClip_RecordingFlag) {
807 return this->updateClipConservativelyUsingBounds(path.getBounds(), op, 807 return this->updateClipConservativelyUsingBounds(path.getBounds(), op,
808 path.isInverseFillType( )); 808 path.isInverseFillType( ));
809 } else { 809 } else {
810 return this->INHERITED::clipPath(path, op, doAA); 810 return this->INHERITED::clipPath(path, op, doAA);
811 } 811 }
812 } 812 }
813 813
814 bool SkPictureRecord::clipRegion(const SkRegion& region, SkRegion::Op op) { 814 bool SkPictureRecord::clipRegion(const SkRegion& region, SkRegion::Op op) {
815 // op + region index + clip params 815 // op + region index + clip params
816 uint32_t size = 3 * kUInt32Size; 816 uint32_t size = 3 * kUInt32Size;
817 // recordRestoreOffsetPlaceholder doesn't always write an offset 817 // recordRestoreOffsetPlaceholder doesn't always write an offset
818 if (!fRestoreOffsetStack.isEmpty()) { 818 if (!fRestoreOffsetStack.isEmpty()) {
819 // + restore offset 819 // + restore offset
820 size += kUInt32Size; 820 size += kUInt32Size;
821 } 821 }
822 uint32_t initialOffset = this->addDraw(CLIP_REGION, &size); 822 size_t initialOffset = this->addDraw(CLIP_REGION, &size);
823 addRegion(region); 823 addRegion(region);
824 addInt(ClipParams_pack(op, false)); 824 addInt(ClipParams_pack(op, false));
825 recordRestoreOffsetPlaceholder(op); 825 recordRestoreOffsetPlaceholder(op);
826 826
827 validate(initialOffset, size); 827 this->validate(initialOffset, size);
828 return this->INHERITED::clipRegion(region, op); 828 return this->INHERITED::clipRegion(region, op);
829 } 829 }
830 830
831 void SkPictureRecord::clear(SkColor color) { 831 void SkPictureRecord::clear(SkColor color) {
832 // op + color 832 // op + color
833 uint32_t size = 2 * kUInt32Size; 833 uint32_t size = 2 * kUInt32Size;
834 uint32_t initialOffset = this->addDraw(DRAW_CLEAR, &size); 834 size_t initialOffset = this->addDraw(DRAW_CLEAR, &size);
835 addInt(color); 835 addInt(color);
836 validate(initialOffset, size); 836 this->validate(initialOffset, size);
837 } 837 }
838 838
839 void SkPictureRecord::drawPaint(const SkPaint& paint) { 839 void SkPictureRecord::drawPaint(const SkPaint& paint) {
840 // op + paint index 840 // op + paint index
841 uint32_t size = 2 * kUInt32Size; 841 uint32_t size = 2 * kUInt32Size;
842 uint32_t initialOffset = this->addDraw(DRAW_PAINT, &size); 842 size_t initialOffset = this->addDraw(DRAW_PAINT, &size);
843 SkASSERT(initialOffset+getPaintOffset(DRAW_PAINT, size) == fWriter.size()); 843 SkASSERT(initialOffset+getPaintOffset(DRAW_PAINT, size) == fWriter.size());
844 addPaint(paint); 844 addPaint(paint);
845 validate(initialOffset, size); 845 this->validate(initialOffset, size);
846 } 846 }
847 847
848 void SkPictureRecord::drawPoints(PointMode mode, size_t count, const SkPoint pts [], 848 void SkPictureRecord::drawPoints(PointMode mode, size_t count, const SkPoint pts [],
849 const SkPaint& paint) { 849 const SkPaint& paint) {
850 // op + paint index + mode + count + point data 850 // op + paint index + mode + count + point data
851 uint32_t size = 4 * kUInt32Size + count * sizeof(SkPoint); 851 uint32_t size = 4 * kUInt32Size + count * sizeof(SkPoint);
852 uint32_t initialOffset = this->addDraw(DRAW_POINTS, &size); 852 size_t initialOffset = this->addDraw(DRAW_POINTS, &size);
853 SkASSERT(initialOffset+getPaintOffset(DRAW_POINTS, size) == fWriter.size()); 853 SkASSERT(initialOffset+getPaintOffset(DRAW_POINTS, size) == fWriter.size());
854 addPaint(paint); 854 addPaint(paint);
855 addInt(mode); 855 addInt(mode);
856 addInt(count); 856 addInt(count);
857 fWriter.writeMul4(pts, count * sizeof(SkPoint)); 857 fWriter.writeMul4(pts, count * sizeof(SkPoint));
858 validate(initialOffset, size); 858 this->validate(initialOffset, size);
859 } 859 }
860 860
861 void SkPictureRecord::drawOval(const SkRect& oval, const SkPaint& paint) { 861 void SkPictureRecord::drawOval(const SkRect& oval, const SkPaint& paint) {
862 // op + paint index + rect 862 // op + paint index + rect
863 uint32_t size = 2 * kUInt32Size + sizeof(oval); 863 uint32_t size = 2 * kUInt32Size + sizeof(oval);
864 uint32_t initialOffset = this->addDraw(DRAW_OVAL, &size); 864 size_t initialOffset = this->addDraw(DRAW_OVAL, &size);
865 SkASSERT(initialOffset+getPaintOffset(DRAW_OVAL, size) == fWriter.size()); 865 SkASSERT(initialOffset+getPaintOffset(DRAW_OVAL, size) == fWriter.size());
866 addPaint(paint); 866 addPaint(paint);
867 addRect(oval); 867 addRect(oval);
868 validate(initialOffset, size); 868 this->validate(initialOffset, size);
869 } 869 }
870 870
871 void SkPictureRecord::drawRect(const SkRect& rect, const SkPaint& paint) { 871 void SkPictureRecord::drawRect(const SkRect& rect, const SkPaint& paint) {
872 // op + paint index + rect 872 // op + paint index + rect
873 uint32_t size = 2 * kUInt32Size + sizeof(rect); 873 uint32_t size = 2 * kUInt32Size + sizeof(rect);
874 uint32_t initialOffset = this->addDraw(DRAW_RECT, &size); 874 size_t initialOffset = this->addDraw(DRAW_RECT, &size);
875 SkASSERT(initialOffset+getPaintOffset(DRAW_RECT, size) == fWriter.size()); 875 SkASSERT(initialOffset+getPaintOffset(DRAW_RECT, size) == fWriter.size());
876 addPaint(paint); 876 addPaint(paint);
877 addRect(rect); 877 addRect(rect);
878 validate(initialOffset, size); 878 this->validate(initialOffset, size);
879 } 879 }
880 880
881 void SkPictureRecord::drawRRect(const SkRRect& rrect, const SkPaint& paint) { 881 void SkPictureRecord::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
882 if (rrect.isRect()) { 882 if (rrect.isRect()) {
883 this->SkPictureRecord::drawRect(rrect.getBounds(), paint); 883 this->SkPictureRecord::drawRect(rrect.getBounds(), paint);
884 } else if (rrect.isOval()) { 884 } else if (rrect.isOval()) {
885 this->SkPictureRecord::drawOval(rrect.getBounds(), paint); 885 this->SkPictureRecord::drawOval(rrect.getBounds(), paint);
886 } else { 886 } else {
887 // op + paint index + rrect 887 // op + paint index + rrect
888 uint32_t initialOffset, size; 888 uint32_t initialOffset, size;
889 size = 2 * kUInt32Size + SkRRect::kSizeInMemory; 889 size = 2 * kUInt32Size + SkRRect::kSizeInMemory;
890 initialOffset = this->addDraw(DRAW_RRECT, &size); 890 initialOffset = this->addDraw(DRAW_RRECT, &size);
891 SkASSERT(initialOffset+getPaintOffset(DRAW_RRECT, size) == fWriter.size( )); 891 SkASSERT(initialOffset+getPaintOffset(DRAW_RRECT, size) == fWriter.size( ));
892 addPaint(paint); 892 addPaint(paint);
893 addRRect(rrect); 893 addRRect(rrect);
894 validate(initialOffset, size); 894 this->validate(initialOffset, size);
895 } 895 }
896 } 896 }
897 897
898 void SkPictureRecord::drawPath(const SkPath& path, const SkPaint& paint) { 898 void SkPictureRecord::drawPath(const SkPath& path, const SkPaint& paint) {
899 // op + paint index + path index 899 // op + paint index + path index
900 uint32_t size = 3 * kUInt32Size; 900 uint32_t size = 3 * kUInt32Size;
901 uint32_t initialOffset = this->addDraw(DRAW_PATH, &size); 901 size_t initialOffset = this->addDraw(DRAW_PATH, &size);
902 SkASSERT(initialOffset+getPaintOffset(DRAW_PATH, size) == fWriter.size()); 902 SkASSERT(initialOffset+getPaintOffset(DRAW_PATH, size) == fWriter.size());
903 addPaint(paint); 903 addPaint(paint);
904 addPath(path); 904 addPath(path);
905 validate(initialOffset, size); 905 this->validate(initialOffset, size);
906 } 906 }
907 907
908 void SkPictureRecord::drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, 908 void SkPictureRecord::drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
909 const SkPaint* paint = NULL) { 909 const SkPaint* paint = NULL) {
910 // op + paint index + bitmap index + left + top 910 // op + paint index + bitmap index + left + top
911 uint32_t size = 3 * kUInt32Size + 2 * sizeof(SkScalar); 911 uint32_t size = 3 * kUInt32Size + 2 * sizeof(SkScalar);
912 uint32_t initialOffset = this->addDraw(DRAW_BITMAP, &size); 912 size_t initialOffset = this->addDraw(DRAW_BITMAP, &size);
913 SkASSERT(initialOffset+getPaintOffset(DRAW_BITMAP, size) == fWriter.size()); 913 SkASSERT(initialOffset+getPaintOffset(DRAW_BITMAP, size) == fWriter.size());
914 addPaintPtr(paint); 914 addPaintPtr(paint);
915 addBitmap(bitmap); 915 addBitmap(bitmap);
916 addScalar(left); 916 addScalar(left);
917 addScalar(top); 917 addScalar(top);
918 validate(initialOffset, size); 918 this->validate(initialOffset, size);
919 } 919 }
920 920
921 void SkPictureRecord::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src, 921 void SkPictureRecord::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
922 const SkRect& dst, const SkPaint* pai nt, 922 const SkRect& dst, const SkPaint* pai nt,
923 DrawBitmapRectFlags flags) { 923 DrawBitmapRectFlags flags) {
924 // id + paint index + bitmap index + bool for 'src' + flags 924 // id + paint index + bitmap index + bool for 'src' + flags
925 uint32_t size = 5 * kUInt32Size; 925 uint32_t size = 5 * kUInt32Size;
926 if (NULL != src) { 926 if (NULL != src) {
927 size += sizeof(*src); // + rect 927 size += sizeof(*src); // + rect
928 } 928 }
929 size += sizeof(dst); // + rect 929 size += sizeof(dst); // + rect
930 930
931 uint32_t initialOffset = this->addDraw(DRAW_BITMAP_RECT_TO_RECT, &size); 931 size_t initialOffset = this->addDraw(DRAW_BITMAP_RECT_TO_RECT, &size);
932 SkASSERT(initialOffset+getPaintOffset(DRAW_BITMAP_RECT_TO_RECT, size) == fWr iter.size()); 932 SkASSERT(initialOffset+getPaintOffset(DRAW_BITMAP_RECT_TO_RECT, size) == fWr iter.size());
933 addPaintPtr(paint); 933 addPaintPtr(paint);
934 addBitmap(bitmap); 934 addBitmap(bitmap);
935 addRectPtr(src); // may be null 935 addRectPtr(src); // may be null
936 addRect(dst); 936 addRect(dst);
937 addInt(flags); 937 addInt(flags);
938 validate(initialOffset, size); 938 this->validate(initialOffset, size);
939 } 939 }
940 940
941 void SkPictureRecord::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m atrix, 941 void SkPictureRecord::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m atrix,
942 const SkPaint* paint) { 942 const SkPaint* paint) {
943 // id + paint index + bitmap index + matrix index 943 // id + paint index + bitmap index + matrix index
944 uint32_t size = 4 * kUInt32Size; 944 uint32_t size = 4 * kUInt32Size;
945 uint32_t initialOffset = this->addDraw(DRAW_BITMAP_MATRIX, &size); 945 size_t initialOffset = this->addDraw(DRAW_BITMAP_MATRIX, &size);
946 SkASSERT(initialOffset+getPaintOffset(DRAW_BITMAP_MATRIX, size) == fWriter.s ize()); 946 SkASSERT(initialOffset+getPaintOffset(DRAW_BITMAP_MATRIX, size) == fWriter.s ize());
947 addPaintPtr(paint); 947 addPaintPtr(paint);
948 addBitmap(bitmap); 948 addBitmap(bitmap);
949 addMatrix(matrix); 949 addMatrix(matrix);
950 validate(initialOffset, size); 950 this->validate(initialOffset, size);
951 } 951 }
952 952
953 void SkPictureRecord::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& cent er, 953 void SkPictureRecord::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& cent er,
954 const SkRect& dst, const SkPaint* paint) { 954 const SkRect& dst, const SkPaint* paint) {
955 // op + paint index + bitmap id + center + dst rect 955 // op + paint index + bitmap id + center + dst rect
956 uint32_t size = 3 * kUInt32Size + sizeof(center) + sizeof(dst); 956 uint32_t size = 3 * kUInt32Size + sizeof(center) + sizeof(dst);
957 uint32_t initialOffset = this->addDraw(DRAW_BITMAP_NINE, &size); 957 size_t initialOffset = this->addDraw(DRAW_BITMAP_NINE, &size);
958 SkASSERT(initialOffset+getPaintOffset(DRAW_BITMAP_NINE, size) == fWriter.siz e()); 958 SkASSERT(initialOffset+getPaintOffset(DRAW_BITMAP_NINE, size) == fWriter.siz e());
959 addPaintPtr(paint); 959 addPaintPtr(paint);
960 addBitmap(bitmap); 960 addBitmap(bitmap);
961 addIRect(center); 961 addIRect(center);
962 addRect(dst); 962 addRect(dst);
963 validate(initialOffset, size); 963 this->validate(initialOffset, size);
964 } 964 }
965 965
966 void SkPictureRecord::drawSprite(const SkBitmap& bitmap, int left, int top, 966 void SkPictureRecord::drawSprite(const SkBitmap& bitmap, int left, int top,
967 const SkPaint* paint = NULL) { 967 const SkPaint* paint = NULL) {
968 // op + paint index + bitmap index + left + top 968 // op + paint index + bitmap index + left + top
969 uint32_t size = 5 * kUInt32Size; 969 uint32_t size = 5 * kUInt32Size;
970 uint32_t initialOffset = this->addDraw(DRAW_SPRITE, &size); 970 size_t initialOffset = this->addDraw(DRAW_SPRITE, &size);
971 SkASSERT(initialOffset+getPaintOffset(DRAW_SPRITE, size) == fWriter.size()); 971 SkASSERT(initialOffset+getPaintOffset(DRAW_SPRITE, size) == fWriter.size());
972 addPaintPtr(paint); 972 addPaintPtr(paint);
973 addBitmap(bitmap); 973 addBitmap(bitmap);
974 addInt(left); 974 addInt(left);
975 addInt(top); 975 addInt(top);
976 validate(initialOffset, size); 976 this->validate(initialOffset, size);
977 } 977 }
978 978
979 void SkPictureRecord::ComputeFontMetricsTopBottom(const SkPaint& paint, SkScalar topbot[2]) { 979 void SkPictureRecord::ComputeFontMetricsTopBottom(const SkPaint& paint, SkScalar topbot[2]) {
980 SkPaint::FontMetrics metrics; 980 SkPaint::FontMetrics metrics;
981 paint.getFontMetrics(&metrics); 981 paint.getFontMetrics(&metrics);
982 SkRect bounds; 982 SkRect bounds;
983 // construct a rect so we can see any adjustments from the paint. 983 // construct a rect so we can see any adjustments from the paint.
984 // we use 0,1 for left,right, just so the rect isn't empty 984 // we use 0,1 for left,right, just so the rect isn't empty
985 bounds.set(0, metrics.fTop, SK_Scalar1, metrics.fBottom); 985 bounds.set(0, metrics.fTop, SK_Scalar1, metrics.fBottom);
986 (void)paint.computeFastBounds(bounds, &bounds); 986 (void)paint.computeFastBounds(bounds, &bounds);
(...skipping 12 matching lines...) Expand all
999 SkScalar y, const SkPaint& paint) { 999 SkScalar y, const SkPaint& paint) {
1000 bool fast = !paint.isVerticalText() && paint.canComputeFastBounds(); 1000 bool fast = !paint.isVerticalText() && paint.canComputeFastBounds();
1001 1001
1002 // op + paint index + length + 'length' worth of chars + x + y 1002 // op + paint index + length + 'length' worth of chars + x + y
1003 uint32_t size = 3 * kUInt32Size + SkAlign4(byteLength) + 2 * sizeof(SkScalar ); 1003 uint32_t size = 3 * kUInt32Size + SkAlign4(byteLength) + 2 * sizeof(SkScalar );
1004 if (fast) { 1004 if (fast) {
1005 size += 2 * sizeof(SkScalar); // + top & bottom 1005 size += 2 * sizeof(SkScalar); // + top & bottom
1006 } 1006 }
1007 1007
1008 DrawType op = fast ? DRAW_TEXT_TOP_BOTTOM : DRAW_TEXT; 1008 DrawType op = fast ? DRAW_TEXT_TOP_BOTTOM : DRAW_TEXT;
1009 uint32_t initialOffset = this->addDraw(op, &size); 1009 size_t initialOffset = this->addDraw(op, &size);
1010 SkASSERT(initialOffset+getPaintOffset(op, size) == fWriter.size()); 1010 SkASSERT(initialOffset+getPaintOffset(op, size) == fWriter.size());
1011 const SkFlatData* flatPaintData = addPaint(paint); 1011 const SkFlatData* flatPaintData = addPaint(paint);
1012 SkASSERT(flatPaintData); 1012 SkASSERT(flatPaintData);
1013 addText(text, byteLength); 1013 addText(text, byteLength);
1014 addScalar(x); 1014 addScalar(x);
1015 addScalar(y); 1015 addScalar(y);
1016 if (fast) { 1016 if (fast) {
1017 addFontMetricsTopBottom(paint, *flatPaintData, y, y); 1017 addFontMetricsTopBottom(paint, *flatPaintData, y, y);
1018 } 1018 }
1019 validate(initialOffset, size); 1019 this->validate(initialOffset, size);
1020 } 1020 }
1021 1021
1022 void SkPictureRecord::drawPosText(const void* text, size_t byteLength, 1022 void SkPictureRecord::drawPosText(const void* text, size_t byteLength,
1023 const SkPoint pos[], const SkPaint& paint) { 1023 const SkPoint pos[], const SkPaint& paint) {
1024 size_t points = paint.countText(text, byteLength); 1024 size_t points = paint.countText(text, byteLength);
1025 if (0 == points) 1025 if (0 == points)
1026 return; 1026 return;
1027 1027
1028 bool canUseDrawH = true; 1028 bool canUseDrawH = true;
1029 SkScalar minY = pos[0].fY; 1029 SkScalar minY = pos[0].fY;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 DrawType op; 1065 DrawType op;
1066 if (fast) { 1066 if (fast) {
1067 op = DRAW_POS_TEXT_H_TOP_BOTTOM; 1067 op = DRAW_POS_TEXT_H_TOP_BOTTOM;
1068 } else if (canUseDrawH) { 1068 } else if (canUseDrawH) {
1069 op = DRAW_POS_TEXT_H; 1069 op = DRAW_POS_TEXT_H;
1070 } else if (fastBounds) { 1070 } else if (fastBounds) {
1071 op = DRAW_POS_TEXT_TOP_BOTTOM; 1071 op = DRAW_POS_TEXT_TOP_BOTTOM;
1072 } else { 1072 } else {
1073 op = DRAW_POS_TEXT; 1073 op = DRAW_POS_TEXT;
1074 } 1074 }
1075 uint32_t initialOffset = this->addDraw(op, &size); 1075 size_t initialOffset = this->addDraw(op, &size);
1076 SkASSERT(initialOffset+getPaintOffset(op, size) == fWriter.size()); 1076 SkASSERT(initialOffset+getPaintOffset(op, size) == fWriter.size());
1077 const SkFlatData* flatPaintData = addPaint(paint); 1077 const SkFlatData* flatPaintData = addPaint(paint);
1078 SkASSERT(flatPaintData); 1078 SkASSERT(flatPaintData);
1079 addText(text, byteLength); 1079 addText(text, byteLength);
1080 addInt(points); 1080 addInt(points);
1081 1081
1082 #ifdef SK_DEBUG_SIZE 1082 #ifdef SK_DEBUG_SIZE
1083 size_t start = fWriter.size(); 1083 size_t start = fWriter.size();
1084 #endif 1084 #endif
1085 if (canUseDrawH) { 1085 if (canUseDrawH) {
1086 if (fast) { 1086 if (fast) {
1087 addFontMetricsTopBottom(paint, *flatPaintData, pos[0].fY, pos[0].fY) ; 1087 addFontMetricsTopBottom(paint, *flatPaintData, pos[0].fY, pos[0].fY) ;
1088 } 1088 }
1089 addScalar(pos[0].fY); 1089 addScalar(pos[0].fY);
1090 SkScalar* xptr = (SkScalar*)fWriter.reserve(points * sizeof(SkScalar)); 1090 SkScalar* xptr = (SkScalar*)fWriter.reserve(points * sizeof(SkScalar));
1091 for (size_t index = 0; index < points; index++) 1091 for (size_t index = 0; index < points; index++)
1092 *xptr++ = pos[index].fX; 1092 *xptr++ = pos[index].fX;
1093 } else { 1093 } else {
1094 fWriter.writeMul4(pos, points * sizeof(SkPoint)); 1094 fWriter.writeMul4(pos, points * sizeof(SkPoint));
1095 if (fastBounds) { 1095 if (fastBounds) {
1096 addFontMetricsTopBottom(paint, *flatPaintData, minY, maxY); 1096 addFontMetricsTopBottom(paint, *flatPaintData, minY, maxY);
1097 } 1097 }
1098 } 1098 }
1099 #ifdef SK_DEBUG_SIZE 1099 #ifdef SK_DEBUG_SIZE
1100 fPointBytes += fWriter.size() - start; 1100 fPointBytes += fWriter.size() - start;
1101 fPointWrites += points; 1101 fPointWrites += points;
1102 #endif 1102 #endif
1103 validate(initialOffset, size); 1103 this->validate(initialOffset, size);
1104 } 1104 }
1105 1105
1106 void SkPictureRecord::drawPosTextH(const void* text, size_t byteLength, 1106 void SkPictureRecord::drawPosTextH(const void* text, size_t byteLength,
1107 const SkScalar xpos[], SkScalar constY, 1107 const SkScalar xpos[], SkScalar constY,
1108 const SkPaint& paint) { 1108 const SkPaint& paint) {
1109 1109
1110 const SkFlatData* flatPaintData = this->getFlatPaintData(paint); 1110 const SkFlatData* flatPaintData = this->getFlatPaintData(paint);
1111 drawPosTextHImpl(text, byteLength, xpos, constY, paint, flatPaintData); 1111 drawPosTextHImpl(text, byteLength, xpos, constY, paint, flatPaintData);
1112 } 1112 }
1113 1113
1114 void SkPictureRecord::drawPosTextHImpl(const void* text, size_t byteLength, 1114 void SkPictureRecord::drawPosTextHImpl(const void* text, size_t byteLength,
1115 const SkScalar xpos[], SkScalar constY, 1115 const SkScalar xpos[], SkScalar constY,
1116 const SkPaint& paint, const SkFlatData* flatPaintData) { 1116 const SkPaint& paint, const SkFlatData* flatPaintData) {
1117 size_t points = paint.countText(text, byteLength); 1117 size_t points = paint.countText(text, byteLength);
1118 if (0 == points) 1118 if (0 == points)
1119 return; 1119 return;
1120 1120
1121 bool fast = !paint.isVerticalText() && paint.canComputeFastBounds(); 1121 bool fast = !paint.isVerticalText() && paint.canComputeFastBounds();
1122 1122
1123 // op + paint index + length + 'length' worth of data + num points 1123 // op + paint index + length + 'length' worth of data + num points
1124 uint32_t size = 3 * kUInt32Size + SkAlign4(byteLength) + 1 * kUInt32Size; 1124 uint32_t size = 3 * kUInt32Size + SkAlign4(byteLength) + 1 * kUInt32Size;
1125 if (fast) { 1125 if (fast) {
1126 size += 2 * sizeof(SkScalar); // + top & bottom 1126 size += 2 * sizeof(SkScalar); // + top & bottom
1127 } 1127 }
1128 // + y + the actual points 1128 // + y + the actual points
1129 size += 1 * kUInt32Size + points * sizeof(SkScalar); 1129 size += 1 * kUInt32Size + points * sizeof(SkScalar);
1130 uint32_t initialOffset = this->addDraw(fast ? DRAW_POS_TEXT_H_TOP_BOTTOM : D RAW_POS_TEXT_H, 1130 size_t initialOffset = this->addDraw(fast ? DRAW_POS_TEXT_H_TOP_BOTTOM : DRA W_POS_TEXT_H,
1131 &size); 1131 &size);
1132 SkASSERT(flatPaintData); 1132 SkASSERT(flatPaintData);
1133 addFlatPaint(flatPaintData); 1133 addFlatPaint(flatPaintData);
1134 1134
1135 addText(text, byteLength); 1135 addText(text, byteLength);
1136 addInt(points); 1136 addInt(points);
1137 1137
1138 #ifdef SK_DEBUG_SIZE 1138 #ifdef SK_DEBUG_SIZE
1139 size_t start = fWriter.size(); 1139 size_t start = fWriter.size();
1140 #endif 1140 #endif
1141 if (fast) { 1141 if (fast) {
1142 addFontMetricsTopBottom(paint, *flatPaintData, constY, constY); 1142 addFontMetricsTopBottom(paint, *flatPaintData, constY, constY);
1143 } 1143 }
1144 addScalar(constY); 1144 addScalar(constY);
1145 fWriter.writeMul4(xpos, points * sizeof(SkScalar)); 1145 fWriter.writeMul4(xpos, points * sizeof(SkScalar));
1146 #ifdef SK_DEBUG_SIZE 1146 #ifdef SK_DEBUG_SIZE
1147 fPointBytes += fWriter.size() - start; 1147 fPointBytes += fWriter.size() - start;
1148 fPointWrites += points; 1148 fPointWrites += points;
1149 #endif 1149 #endif
1150 validate(initialOffset, size); 1150 this->validate(initialOffset, size);
1151 } 1151 }
1152 1152
1153 void SkPictureRecord::drawTextOnPath(const void* text, size_t byteLength, 1153 void SkPictureRecord::drawTextOnPath(const void* text, size_t byteLength,
1154 const SkPath& path, const SkMatrix* matrix, 1154 const SkPath& path, const SkMatrix* matrix,
1155 const SkPaint& paint) { 1155 const SkPaint& paint) {
1156 // op + paint index + length + 'length' worth of data + path index + matrix index 1156 // op + paint index + length + 'length' worth of data + path index + matrix index
1157 uint32_t size = 3 * kUInt32Size + SkAlign4(byteLength) + 2 * kUInt32Size; 1157 uint32_t size = 3 * kUInt32Size + SkAlign4(byteLength) + 2 * kUInt32Size;
1158 uint32_t initialOffset = this->addDraw(DRAW_TEXT_ON_PATH, &size); 1158 size_t initialOffset = this->addDraw(DRAW_TEXT_ON_PATH, &size);
1159 SkASSERT(initialOffset+getPaintOffset(DRAW_TEXT_ON_PATH, size) == fWriter.si ze()); 1159 SkASSERT(initialOffset+getPaintOffset(DRAW_TEXT_ON_PATH, size) == fWriter.si ze());
1160 addPaint(paint); 1160 addPaint(paint);
1161 addText(text, byteLength); 1161 addText(text, byteLength);
1162 addPath(path); 1162 addPath(path);
1163 addMatrixPtr(matrix); 1163 addMatrixPtr(matrix);
1164 validate(initialOffset, size); 1164 this->validate(initialOffset, size);
1165 } 1165 }
1166 1166
1167 void SkPictureRecord::drawPicture(SkPicture& picture) { 1167 void SkPictureRecord::drawPicture(SkPicture& picture) {
1168 // op + picture index 1168 // op + picture index
1169 uint32_t size = 2 * kUInt32Size; 1169 uint32_t size = 2 * kUInt32Size;
1170 uint32_t initialOffset = this->addDraw(DRAW_PICTURE, &size); 1170 size_t initialOffset = this->addDraw(DRAW_PICTURE, &size);
1171 addPicture(picture); 1171 addPicture(picture);
1172 validate(initialOffset, size); 1172 this->validate(initialOffset, size);
1173 } 1173 }
1174 1174
1175 void SkPictureRecord::drawVertices(VertexMode vmode, int vertexCount, 1175 void SkPictureRecord::drawVertices(VertexMode vmode, int vertexCount,
1176 const SkPoint vertices[], const SkPoint texs[], 1176 const SkPoint vertices[], const SkPoint texs[],
1177 const SkColor colors[], SkXfermode*, 1177 const SkColor colors[], SkXfermode*,
1178 const uint16_t indices[], int indexCount, 1178 const uint16_t indices[], int indexCount,
1179 const SkPaint& paint) { 1179 const SkPaint& paint) {
1180 uint32_t flags = 0; 1180 uint32_t flags = 0;
1181 if (texs) { 1181 if (texs) {
1182 flags |= DRAW_VERTICES_HAS_TEXS; 1182 flags |= DRAW_VERTICES_HAS_TEXS;
(...skipping 11 matching lines...) Expand all
1194 size += vertexCount * sizeof(SkPoint); // + uvs 1194 size += vertexCount * sizeof(SkPoint); // + uvs
1195 } 1195 }
1196 if (flags & DRAW_VERTICES_HAS_COLORS) { 1196 if (flags & DRAW_VERTICES_HAS_COLORS) {
1197 size += vertexCount * sizeof(SkColor); // + vert colors 1197 size += vertexCount * sizeof(SkColor); // + vert colors
1198 } 1198 }
1199 if (flags & DRAW_VERTICES_HAS_INDICES) { 1199 if (flags & DRAW_VERTICES_HAS_INDICES) {
1200 // + num indices + indices 1200 // + num indices + indices
1201 size += 1 * kUInt32Size + SkAlign4(indexCount * sizeof(uint16_t)); 1201 size += 1 * kUInt32Size + SkAlign4(indexCount * sizeof(uint16_t));
1202 } 1202 }
1203 1203
1204 uint32_t initialOffset = this->addDraw(DRAW_VERTICES, &size); 1204 size_t initialOffset = this->addDraw(DRAW_VERTICES, &size);
1205 SkASSERT(initialOffset+getPaintOffset(DRAW_VERTICES, size) == fWriter.size() ); 1205 SkASSERT(initialOffset+getPaintOffset(DRAW_VERTICES, size) == fWriter.size() );
1206 addPaint(paint); 1206 addPaint(paint);
1207 addInt(flags); 1207 addInt(flags);
1208 addInt(vmode); 1208 addInt(vmode);
1209 addInt(vertexCount); 1209 addInt(vertexCount);
1210 addPoints(vertices, vertexCount); 1210 addPoints(vertices, vertexCount);
1211 if (flags & DRAW_VERTICES_HAS_TEXS) { 1211 if (flags & DRAW_VERTICES_HAS_TEXS) {
1212 addPoints(texs, vertexCount); 1212 addPoints(texs, vertexCount);
1213 } 1213 }
1214 if (flags & DRAW_VERTICES_HAS_COLORS) { 1214 if (flags & DRAW_VERTICES_HAS_COLORS) {
1215 fWriter.writeMul4(colors, vertexCount * sizeof(SkColor)); 1215 fWriter.writeMul4(colors, vertexCount * sizeof(SkColor));
1216 } 1216 }
1217 if (flags & DRAW_VERTICES_HAS_INDICES) { 1217 if (flags & DRAW_VERTICES_HAS_INDICES) {
1218 addInt(indexCount); 1218 addInt(indexCount);
1219 fWriter.writePad(indices, indexCount * sizeof(uint16_t)); 1219 fWriter.writePad(indices, indexCount * sizeof(uint16_t));
1220 } 1220 }
1221 validate(initialOffset, size); 1221 this->validate(initialOffset, size);
1222 } 1222 }
1223 1223
1224 void SkPictureRecord::drawData(const void* data, size_t length) { 1224 void SkPictureRecord::drawData(const void* data, size_t length) {
1225 // op + length + 'length' worth of data 1225 // op + length + 'length' worth of data
1226 uint32_t size = 2 * kUInt32Size + SkAlign4(length); 1226 uint32_t size = 2 * kUInt32Size + SkAlign4(length);
1227 uint32_t initialOffset = this->addDraw(DRAW_DATA, &size); 1227 size_t initialOffset = this->addDraw(DRAW_DATA, &size);
1228 addInt(length); 1228 addInt(length);
1229 fWriter.writePad(data, length); 1229 fWriter.writePad(data, length);
1230 validate(initialOffset, size); 1230 this->validate(initialOffset, size);
1231 } 1231 }
1232 1232
1233 void SkPictureRecord::beginCommentGroup(const char* description) { 1233 void SkPictureRecord::beginCommentGroup(const char* description) {
1234 // op/size + length of string + \0 terminated chars 1234 // op/size + length of string + \0 terminated chars
1235 int length = strlen(description); 1235 int length = strlen(description);
1236 uint32_t size = 2 * kUInt32Size + SkAlign4(length + 1); 1236 uint32_t size = 2 * kUInt32Size + SkAlign4(length + 1);
1237 uint32_t initialOffset = this->addDraw(BEGIN_COMMENT_GROUP, &size); 1237 size_t initialOffset = this->addDraw(BEGIN_COMMENT_GROUP, &size);
1238 fWriter.writeString(description, length); 1238 fWriter.writeString(description, length);
1239 validate(initialOffset, size); 1239 this->validate(initialOffset, size);
1240 } 1240 }
1241 1241
1242 void SkPictureRecord::addComment(const char* kywd, const char* value) { 1242 void SkPictureRecord::addComment(const char* kywd, const char* value) {
1243 // op/size + 2x length of string + 2x \0 terminated chars 1243 // op/size + 2x length of string + 2x \0 terminated chars
1244 int kywdLen = strlen(kywd); 1244 int kywdLen = strlen(kywd);
1245 int valueLen = strlen(value); 1245 int valueLen = strlen(value);
1246 uint32_t size = 3 * kUInt32Size + SkAlign4(kywdLen + 1) + SkAlign4(valueLen + 1); 1246 uint32_t size = 3 * kUInt32Size + SkAlign4(kywdLen + 1) + SkAlign4(valueLen + 1);
1247 uint32_t initialOffset = this->addDraw(COMMENT, &size); 1247 size_t initialOffset = this->addDraw(COMMENT, &size);
1248 fWriter.writeString(kywd, kywdLen); 1248 fWriter.writeString(kywd, kywdLen);
1249 fWriter.writeString(value, valueLen); 1249 fWriter.writeString(value, valueLen);
1250 validate(initialOffset, size); 1250 this->validate(initialOffset, size);
1251 } 1251 }
1252 1252
1253 void SkPictureRecord::endCommentGroup() { 1253 void SkPictureRecord::endCommentGroup() {
1254 // op/size 1254 // op/size
1255 uint32_t size = 1 * kUInt32Size; 1255 uint32_t size = 1 * kUInt32Size;
1256 uint32_t initialOffset = this->addDraw(END_COMMENT_GROUP, &size); 1256 size_t initialOffset = this->addDraw(END_COMMENT_GROUP, &size);
1257 validate(initialOffset, size); 1257 this->validate(initialOffset, size);
1258 } 1258 }
1259 1259
1260 /////////////////////////////////////////////////////////////////////////////// 1260 ///////////////////////////////////////////////////////////////////////////////
1261 1261
1262 void SkPictureRecord::addBitmap(const SkBitmap& bitmap) { 1262 void SkPictureRecord::addBitmap(const SkBitmap& bitmap) {
1263 const int index = fBitmapHeap->insert(bitmap); 1263 const int index = fBitmapHeap->insert(bitmap);
1264 // In debug builds, a bad return value from insert() will crash, allowing fo r debugging. In 1264 // In debug builds, a bad return value from insert() will crash, allowing fo r debugging. In
1265 // release builds, the invalid value will be recorded so that the reader wil l know that there 1265 // release builds, the invalid value will be recorded so that the reader wil l know that there
1266 // was a problem. 1266 // was a problem.
1267 SkASSERT(index != SkBitmapHeap::INVALID_SLOT); 1267 SkASSERT(index != SkBitmapHeap::INVALID_SLOT);
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1501 void SkPictureRecord::validateRegions() const { 1501 void SkPictureRecord::validateRegions() const {
1502 int count = fRegions.count(); 1502 int count = fRegions.count();
1503 SkASSERT((unsigned) count < 0x1000); 1503 SkASSERT((unsigned) count < 0x1000);
1504 for (int index = 0; index < count; index++) { 1504 for (int index = 0; index < count; index++) {
1505 const SkFlatData* region = fRegions[index]; 1505 const SkFlatData* region = fRegions[index];
1506 SkASSERT(region); 1506 SkASSERT(region);
1507 // region->validate(); 1507 // region->validate();
1508 } 1508 }
1509 } 1509 }
1510 #endif 1510 #endif
OLDNEW
« no previous file with comments | « src/core/SkPictureRecord.h ('k') | src/gpu/GrAtlas.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698