OLD | NEW |
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 #include <new> | 7 #include <new> |
8 #include "SkBBoxHierarchy.h" | 8 #include "SkBBoxHierarchy.h" |
9 #include "SkOffsetTable.h" | 9 #include "SkOffsetTable.h" |
10 #include "SkPicturePlayback.h" | 10 #include "SkPicturePlayback.h" |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 void SkPicturePlayback::init() { | 254 void SkPicturePlayback::init() { |
255 fBitmaps = NULL; | 255 fBitmaps = NULL; |
256 fPaints = NULL; | 256 fPaints = NULL; |
257 fPictureRefs = NULL; | 257 fPictureRefs = NULL; |
258 fPictureCount = 0; | 258 fPictureCount = 0; |
259 fOpData = NULL; | 259 fOpData = NULL; |
260 fFactoryPlayback = NULL; | 260 fFactoryPlayback = NULL; |
261 fBoundingHierarchy = NULL; | 261 fBoundingHierarchy = NULL; |
262 fStateTree = NULL; | 262 fStateTree = NULL; |
263 fCachedActiveOps = NULL; | 263 fCachedActiveOps = NULL; |
| 264 fCurOffset = 0; |
264 } | 265 } |
265 | 266 |
266 SkPicturePlayback::~SkPicturePlayback() { | 267 SkPicturePlayback::~SkPicturePlayback() { |
267 SkSafeUnref(fOpData); | 268 SkSafeUnref(fOpData); |
268 | 269 |
269 SkSafeUnref(fBitmaps); | 270 SkSafeUnref(fBitmaps); |
270 SkSafeUnref(fPaints); | 271 SkSafeUnref(fPaints); |
271 SkSafeUnref(fBoundingHierarchy); | 272 SkSafeUnref(fBoundingHierarchy); |
272 SkSafeUnref(fStateTree); | 273 SkSafeUnref(fStateTree); |
273 | 274 |
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
831 if (0 != fCachedActiveOps->fOps.count()) { | 832 if (0 != fCachedActiveOps->fOps.count()) { |
832 SkTQSort<SkPictureStateTree::Draw>( | 833 SkTQSort<SkPictureStateTree::Draw>( |
833 reinterpret_cast<SkPictureStateTree::Draw**>(fCachedActiveOps->fOps.
begin()), | 834 reinterpret_cast<SkPictureStateTree::Draw**>(fCachedActiveOps->fOps.
begin()), |
834 reinterpret_cast<SkPictureStateTree::Draw**>(fCachedActiveOps->fOps.
end()-1)); | 835 reinterpret_cast<SkPictureStateTree::Draw**>(fCachedActiveOps->fOps.
end()-1)); |
835 } | 836 } |
836 | 837 |
837 fCachedActiveOps->fCacheQueryRect = query; | 838 fCachedActiveOps->fCacheQueryRect = query; |
838 return *fCachedActiveOps; | 839 return *fCachedActiveOps; |
839 } | 840 } |
840 | 841 |
| 842 class SkAutoResetOpID { |
| 843 public: |
| 844 SkAutoResetOpID(SkPicturePlayback* playback) : fPlayback(playback) { } |
| 845 ~SkAutoResetOpID() { |
| 846 if (NULL != fPlayback) { |
| 847 fPlayback->resetOpID(); |
| 848 } |
| 849 } |
| 850 |
| 851 private: |
| 852 SkPicturePlayback* fPlayback; |
| 853 }; |
| 854 |
841 void SkPicturePlayback::draw(SkCanvas& canvas, SkDrawPictureCallback* callback)
{ | 855 void SkPicturePlayback::draw(SkCanvas& canvas, SkDrawPictureCallback* callback)
{ |
| 856 SkAutoResetOpID aroi(this); |
| 857 SkASSERT(0 == fCurOffset); |
| 858 |
842 #ifdef ENABLE_TIME_DRAW | 859 #ifdef ENABLE_TIME_DRAW |
843 SkAutoTime at("SkPicture::draw", 50); | 860 SkAutoTime at("SkPicture::draw", 50); |
844 #endif | 861 #endif |
845 | 862 |
846 #ifdef SPEW_CLIP_SKIPPING | 863 #ifdef SPEW_CLIP_SKIPPING |
847 SkipClipRec skipRect, skipRRect, skipRegion, skipPath, skipCull; | 864 SkipClipRec skipRect, skipRRect, skipRegion, skipPath, skipCull; |
848 int opCount = 0; | 865 int opCount = 0; |
849 #endif | 866 #endif |
850 | 867 |
851 #ifdef SK_BUILD_FOR_ANDROID | 868 #ifdef SK_BUILD_FOR_ANDROID |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
912 #ifdef SK_BUILD_FOR_ANDROID | 929 #ifdef SK_BUILD_FOR_ANDROID |
913 if (fAbortCurrentPlayback) { | 930 if (fAbortCurrentPlayback) { |
914 return; | 931 return; |
915 } | 932 } |
916 #endif | 933 #endif |
917 | 934 |
918 #ifdef SPEW_CLIP_SKIPPING | 935 #ifdef SPEW_CLIP_SKIPPING |
919 opCount++; | 936 opCount++; |
920 #endif | 937 #endif |
921 | 938 |
922 size_t curOffset = reader.offset(); | 939 fCurOffset = reader.offset(); |
923 uint32_t size; | 940 uint32_t size; |
924 DrawType op = read_op_and_size(&reader, &size); | 941 DrawType op = read_op_and_size(&reader, &size); |
925 size_t skipTo = 0; | 942 size_t skipTo = 0; |
926 if (NOOP == op) { | 943 if (NOOP == op) { |
927 // NOOPs are to be ignored - do not propagate them any further | 944 // NOOPs are to be ignored - do not propagate them any further |
928 skipTo = curOffset + size; | 945 skipTo = fCurOffset + size; |
929 #ifdef SK_DEVELOPER | 946 #ifdef SK_DEVELOPER |
930 } else { | 947 } else { |
931 opIndex++; | 948 opIndex++; |
932 if (this->preDraw(opIndex, op)) { | 949 if (this->preDraw(opIndex, op)) { |
933 skipTo = curOffset + size; | 950 skipTo = fCurOffset + size; |
934 } | 951 } |
935 #endif | 952 #endif |
936 } | 953 } |
937 | 954 |
938 if (0 != skipTo) { | 955 if (0 != skipTo) { |
939 if (it.isValid()) { | 956 if (it.isValid()) { |
940 // If using a bounding box hierarchy, advance the state tree | 957 // If using a bounding box hierarchy, advance the state tree |
941 // iterator until at or after skipTo | 958 // iterator until at or after skipTo |
942 uint32_t adjustedSkipTo; | 959 uint32_t adjustedSkipTo; |
943 do { | 960 do { |
(...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1805 for (index = 0; index < fPictureCount; index++) | 1822 for (index = 0; index < fPictureCount; index++) |
1806 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer
), | 1823 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer
), |
1807 "picture%p, ", fPictureRefs[index]); | 1824 "picture%p, ", fPictureRefs[index]); |
1808 if (fPictureCount > 0) | 1825 if (fPictureCount > 0) |
1809 SkDebugf("%s0};\n", pBuffer); | 1826 SkDebugf("%s0};\n", pBuffer); |
1810 | 1827 |
1811 const_cast<SkPicturePlayback*>(this)->dumpStream(); | 1828 const_cast<SkPicturePlayback*>(this)->dumpStream(); |
1812 } | 1829 } |
1813 | 1830 |
1814 #endif | 1831 #endif |
OLD | NEW |