OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 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 | 8 |
9 | 9 |
10 #include "SkDrawCommand.h" | 10 #include "SkDrawCommand.h" |
11 | 11 |
12 #include "SkBlurMaskFilter.h" | 12 #include "SkBlurMaskFilter.h" |
13 #include "SkColorFilter.h" | 13 #include "SkColorFilter.h" |
14 #include "SkDashPathEffect.h" | 14 #include "SkDashPathEffect.h" |
15 #include "SkImageFilter.h" | 15 #include "SkImageFilter.h" |
16 #include "SkMaskFilter.h" | 16 #include "SkMaskFilter.h" |
17 #include "SkObjectParser.h" | 17 #include "SkObjectParser.h" |
18 #include "SkPaintDefaults.h" | 18 #include "SkPaintDefaults.h" |
19 #include "SkPathEffect.h" | 19 #include "SkPathEffect.h" |
20 #include "SkPicture.h" | 20 #include "SkPicture.h" |
21 #include "SkTextBlob.h" | 21 #include "SkTextBlob.h" |
22 #include "SkTextBlobRunIterator.h" | 22 #include "SkTextBlobRunIterator.h" |
23 #include "SkTHash.h" | 23 #include "SkTHash.h" |
24 #include "SkTypeface.h" | 24 #include "SkTypeface.h" |
25 #include "SkValidatingReadBuffer.h" | 25 #include "SkValidatingReadBuffer.h" |
26 #include "SkWriteBuffer.h" | 26 #include "SkWriteBuffer.h" |
27 | 27 |
28 #if SK_SUPPORT_GPU | |
29 #include "GrContext.h" | |
30 #include "GrRenderTarget.h" | |
31 #endif | |
32 | |
33 #define SKDEBUGCANVAS_ATTRIBUTE_COMMAND "command" | 28 #define SKDEBUGCANVAS_ATTRIBUTE_COMMAND "command" |
34 #define SKDEBUGCANVAS_ATTRIBUTE_VISIBLE "visible" | 29 #define SKDEBUGCANVAS_ATTRIBUTE_VISIBLE "visible" |
35 #define SKDEBUGCANVAS_ATTRIBUTE_AUDITTRAIL "auditTrail" | |
36 #define SKDEBUGCANVAS_ATTRIBUTE_MATRIX "matrix" | 30 #define SKDEBUGCANVAS_ATTRIBUTE_MATRIX "matrix" |
37 #define SKDEBUGCANVAS_ATTRIBUTE_COORDS "coords" | 31 #define SKDEBUGCANVAS_ATTRIBUTE_COORDS "coords" |
38 #define SKDEBUGCANVAS_ATTRIBUTE_BOUNDS "bounds" | 32 #define SKDEBUGCANVAS_ATTRIBUTE_BOUNDS "bounds" |
39 #define SKDEBUGCANVAS_ATTRIBUTE_PAINT "paint" | 33 #define SKDEBUGCANVAS_ATTRIBUTE_PAINT "paint" |
40 #define SKDEBUGCANVAS_ATTRIBUTE_OUTER "outer" | 34 #define SKDEBUGCANVAS_ATTRIBUTE_OUTER "outer" |
41 #define SKDEBUGCANVAS_ATTRIBUTE_INNER "inner" | 35 #define SKDEBUGCANVAS_ATTRIBUTE_INNER "inner" |
42 #define SKDEBUGCANVAS_ATTRIBUTE_MODE "mode" | 36 #define SKDEBUGCANVAS_ATTRIBUTE_MODE "mode" |
43 #define SKDEBUGCANVAS_ATTRIBUTE_POINTS "points" | 37 #define SKDEBUGCANVAS_ATTRIBUTE_POINTS "points" |
44 #define SKDEBUGCANVAS_ATTRIBUTE_PATH "path" | 38 #define SKDEBUGCANVAS_ATTRIBUTE_PATH "path" |
45 #define SKDEBUGCANVAS_ATTRIBUTE_TEXT "text" | 39 #define SKDEBUGCANVAS_ATTRIBUTE_TEXT "text" |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 return SkString(GetCommandString(fOpType)); | 214 return SkString(GetCommandString(fOpType)); |
221 } | 215 } |
222 | 216 |
223 Json::Value SkDrawCommand::toJSON(UrlDataManager& urlDataManager) const { | 217 Json::Value SkDrawCommand::toJSON(UrlDataManager& urlDataManager) const { |
224 Json::Value result; | 218 Json::Value result; |
225 result[SKDEBUGCANVAS_ATTRIBUTE_COMMAND] = this->GetCommandString(fOpType); | 219 result[SKDEBUGCANVAS_ATTRIBUTE_COMMAND] = this->GetCommandString(fOpType); |
226 result[SKDEBUGCANVAS_ATTRIBUTE_VISIBLE] = Json::Value(this->isVisible()); | 220 result[SKDEBUGCANVAS_ATTRIBUTE_VISIBLE] = Json::Value(this->isVisible()); |
227 return result; | 221 return result; |
228 } | 222 } |
229 | 223 |
230 Json::Value SkDrawCommand::drawToAndCollectJSON(SkCanvas* canvas, | |
231 UrlDataManager& urlDataManager, | |
232 int opIndex) const { | |
233 Json::Value result = this->toJSON(urlDataManager); | |
234 | |
235 SkASSERT(canvas); | |
236 | |
237 #if SK_SUPPORT_GPU | |
238 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget(); | |
239 if (rt) { | |
240 GrContext* ctx = rt->getContext(); | |
241 if(ctx) { | |
242 GrAuditTrail* at = ctx->getAuditTrail(); | |
243 GrAuditTrail::AutoCollectBatches enable(at, opIndex); | |
244 this->execute(canvas); | |
245 | |
246 // TODO if this is inefficient we could add a method to GrAuditTrail
which takes | |
247 // a Json::Value and is only compiled in this file | |
248 Json::Value parsedFromString; | |
249 Json::Reader reader; | |
250 SkDEBUGCODE(bool parsingSuccessful = )reader.parse(at->toJson(opInde
x).c_str(), | |
251 parsedFromString)
; | |
252 SkASSERT(parsingSuccessful); | |
253 | |
254 result[SKDEBUGCANVAS_ATTRIBUTE_AUDITTRAIL] = parsedFromString; | |
255 } | |
256 } | |
257 #endif | |
258 return result; | |
259 } | |
260 | |
261 #define INSTALL_FACTORY(name) factories.set(SkString(GetCommandString(k ## name
##_OpType)), \ | 224 #define INSTALL_FACTORY(name) factories.set(SkString(GetCommandString(k ## name
##_OpType)), \ |
262 (FROM_JSON) Sk ## name ## Command::f
romJSON) | 225 (FROM_JSON) Sk ## name ## Command::f
romJSON) |
263 SkDrawCommand* SkDrawCommand::fromJSON(Json::Value& command, UrlDataManager& url
DataManager) { | 226 SkDrawCommand* SkDrawCommand::fromJSON(Json::Value& command, UrlDataManager& url
DataManager) { |
264 static SkTHashMap<SkString, FROM_JSON> factories; | 227 static SkTHashMap<SkString, FROM_JSON> factories; |
265 static bool initialized = false; | 228 static bool initialized = false; |
266 if (!initialized) { | 229 if (!initialized) { |
267 initialized = true; | 230 initialized = true; |
268 INSTALL_FACTORY(Restore); | 231 INSTALL_FACTORY(Restore); |
269 INSTALL_FACTORY(ClipPath); | 232 INSTALL_FACTORY(ClipPath); |
270 INSTALL_FACTORY(ClipRegion); | 233 INSTALL_FACTORY(ClipRegion); |
(...skipping 2837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3108 result[SKDEBUGCANVAS_ATTRIBUTE_MATRIX] = MakeJsonMatrix(fMatrix); | 3071 result[SKDEBUGCANVAS_ATTRIBUTE_MATRIX] = MakeJsonMatrix(fMatrix); |
3109 return result; | 3072 return result; |
3110 } | 3073 } |
3111 | 3074 |
3112 SkSetMatrixCommand* SkSetMatrixCommand::fromJSON(Json::Value& command, | 3075 SkSetMatrixCommand* SkSetMatrixCommand::fromJSON(Json::Value& command, |
3113 UrlDataManager& urlDataManager)
{ | 3076 UrlDataManager& urlDataManager)
{ |
3114 SkMatrix matrix; | 3077 SkMatrix matrix; |
3115 extract_json_matrix(command[SKDEBUGCANVAS_ATTRIBUTE_MATRIX], &matrix); | 3078 extract_json_matrix(command[SKDEBUGCANVAS_ATTRIBUTE_MATRIX], &matrix); |
3116 return new SkSetMatrixCommand(matrix); | 3079 return new SkSetMatrixCommand(matrix); |
3117 } | 3080 } |
OLD | NEW |