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

Side by Side Diff: dm/DMPipeTask.cpp

Issue 47773002: DM: add --pipe (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 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 | Annotate | Revision Log
« dm/DMPipeTask.h ('K') | « dm/DMPipeTask.h ('k') | dm/README » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #include "DMPipeTask.h"
2 #include "DMUtil.h"
3 #include "DMWriteTask.h"
4
5 #include "SamplePipeControllers.h"
6 #include "SkCommandLineFlags.h"
7 #include "SkGPipe.h"
8
9 DEFINE_bool(pipe, false, "If true, check several pipe variants against the refer ence bitmap.");
10
11 namespace DM {
12
13 static const char* kNames[] = {
epoger 2013/10/28 17:42:15 I see that the indices of these correspond to the
mtklein 2013/10/28 19:03:41 Added get_name().
14 "pipe",
15 "cross_process_pipe",
16 "shared_address_space_pipe",
17 "cross_process_shared_address_space_pipe",
18 };
19
20 static uint32_t get_flags(bool crossProcess, bool sharedAddressSpace) {
21 uint32_t flags = 0;
22 if (crossProcess) {
23 flags |= SkGPipeWriter::kCrossProcess_Flag;
24 }
25 if (sharedAddressSpace) {
26 flags |= SkGPipeWriter::kSharedAddressSpace_Flag;
27 }
28 return flags;
29 }
30
31 PipeTask::PipeTask(const Task& parent,
32 skiagm::GM* gm,
33 SkBitmap reference,
34 bool crossProcess,
35 bool sharedAddressSpace)
36 : Task(parent)
37 , fFlags(get_flags(crossProcess, sharedAddressSpace))
38 , fName(UnderJoin(parent.name().c_str(), kNames[fFlags]))
39 , fGM(gm)
40 , fReference(reference)
41 {}
42
43 void PipeTask::draw() {
44 SkBitmap bitmap;
45 SetupBitmap(fReference.config(), fGM.get(), &bitmap);
46
47 SkCanvas canvas(bitmap);
48 PipeController pipeController(&canvas, &SkImageDecoder::DecodeMemory);
49 SkGPipeWriter writer;
50
51 SkCanvas* pipeCanvas = writer.startRecording(&pipeController,
52 fFlags,
53 bitmap.width(),
54 bitmap.height());
55 pipeCanvas->concat(fGM->getInitialTransform());
56 fGM->draw(pipeCanvas);
57 writer.endRecording();
58
59 if (!BitmapsEqual(bitmap, fReference)) {
60 this->fail();
61 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap)));
62 }
63 }
64
65 bool PipeTask::shouldSkip() const {
66 if (!FLAGS_pipe) {
67 return true;
68 }
69 if (fGM->getFlags() & skiagm::GM::kSkipPipe_Flag) {
70 return true;
71 }
72 if (fFlags == SkGPipeWriter::kCrossProcess_Flag &&
73 fGM->getFlags() & skiagm::GM::kSkipPipeCrossProcess_Flag) {
74 return true;
75 }
76 return false;
77 }
78
79 } // namespace DM
OLDNEW
« dm/DMPipeTask.h ('K') | « dm/DMPipeTask.h ('k') | dm/README » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698