1ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org#include "DMCpuGMTask.h"
299589af4e333422639d7e873207dd323fdd6e808commit-bot@chromium.org#include "DMExpectationsTask.h"
32d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org#include "DMPipeTask.h"
4a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org#include "DMQuiltTask.h"
5e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#include "DMRecordTask.h"
6d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "DMReplayTask.h"
7192cbf67b281b20477320134962d554ed823c691commit-bot@chromium.org#include "DMSerializeTask.h"
8d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "DMUtil.h"
9a7a9f37a3195e8efa1571a3707457c26e2f896a9mtklein@google.com#include "DMWriteTask.h"
10d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
11d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comnamespace DM {
12d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
13ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgCpuGMTask::CpuGMTask(const char* config,
14ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org                     Reporter* reporter,
15ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org                     TaskRunner* taskRunner,
16ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org                     skiagm::GMRegistry::Factory gmFactory,
17e4d3e605f74a23d050abad29909af421d8b1cf1amtklein                     const Expectations& expectations,
18ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org                     SkColorType colorType)
19ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org    : CpuTask(reporter, taskRunner)
20d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    , fGMFactory(gmFactory)
21d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    , fGM(fGMFactory(NULL))
2238aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org    , fName(UnderJoin(fGM->getName(), config))
2399589af4e333422639d7e873207dd323fdd6e808commit-bot@chromium.org    , fExpectations(expectations)
2415a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org    , fColorType(colorType)
25d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    {}
26d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
27ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgvoid CpuGMTask::draw() {
28d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    SkBitmap bitmap;
29266420722e18dcc8b6d4a7379a42b8591ccd2b6dcommit-bot@chromium.org    AllocatePixels(fColorType, fGM->getISize().width(), fGM->getISize().height(), &bitmap);
30d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
31192cbf67b281b20477320134962d554ed823c691commit-bot@chromium.org    SkCanvas canvas(bitmap);
32d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    canvas.concat(fGM->getInitialTransform());
33d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    fGM->draw(&canvas);
34d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    canvas.flush();
35d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
36d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com#define SPAWN(ChildTask, ...) this->spawnChild(SkNEW_ARGS(ChildTask, (*this, __VA_ARGS__)))
3799589af4e333422639d7e873207dd323fdd6e808commit-bot@chromium.org    SPAWN(ExpectationsTask, fExpectations, bitmap);
38ee21a3e395298021ca70e0d72bf2d983b2fc9225mtklein@google.com
3990b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org    SPAWN(PipeTask, fGMFactory(NULL), bitmap, PipeTask::kInProcess_Mode);
4090b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org    SPAWN(PipeTask, fGMFactory(NULL), bitmap, PipeTask::kCrossProcess_Mode);
4190b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org    SPAWN(PipeTask, fGMFactory(NULL), bitmap, PipeTask::kSharedAddress_Mode);
42a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    SPAWN(QuiltTask, fGMFactory(NULL), bitmap);
4390b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org    SPAWN(RecordTask, fGMFactory(NULL), bitmap, RecordTask::kOptimize_Mode);
4490b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org    SPAWN(RecordTask, fGMFactory(NULL), bitmap, RecordTask::kNoOptimize_Mode);
4590b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org    SPAWN(ReplayTask, fGMFactory(NULL), bitmap, ReplayTask::kNormal_Mode);
4690b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org    SPAWN(ReplayTask, fGMFactory(NULL), bitmap, ReplayTask::kRTree_Mode);
47d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com    SPAWN(SerializeTask, fGMFactory(NULL), bitmap);
48c1362424b864ee3ae7aa44971985e5481057363acommit-bot@chromium.org
49d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com    SPAWN(WriteTask, bitmap);
50d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com#undef SPAWN
51d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com}
52d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
53ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgbool CpuGMTask::shouldSkip() const {
5415a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org    if (kRGB_565_SkColorType == fColorType && (fGM->getFlags() & skiagm::GM::kSkip565_Flag)) {
55d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com        return true;
56d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    }
57d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    if (fGM->getFlags() & skiagm::GM::kGPUOnly_Flag) {
58d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com        return true;
59d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    }
60d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    return false;
61d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com}
62d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
63d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com}  // namespace DM
64