1ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org#include "DMGpuGMTask.h"
2d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
399589af4e333422639d7e873207dd323fdd6e808commit-bot@chromium.org#include "DMExpectationsTask.h"
4d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "DMUtil.h"
5a7a9f37a3195e8efa1571a3707457c26e2f896a9mtklein@google.com#include "DMWriteTask.h"
6d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "SkCommandLineFlags.h"
715a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org#include "SkSurface.h"
8d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "SkTLS.h"
9d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
10d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comnamespace DM {
11d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
12ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgGpuGMTask::GpuGMTask(const char* config,
13ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org                     Reporter* reporter,
14ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org                     TaskRunner* taskRunner,
15ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org                     skiagm::GMRegistry::Factory gmFactory,
16e4d3e605f74a23d050abad29909af421d8b1cf1amtklein                     const Expectations& expectations,
17ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org                     GrContextFactory::GLContextType contextType,
18ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org                     int sampleCount)
19ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org    : GpuTask(reporter, taskRunner)
20d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    , fGM(gmFactory(NULL))
2138aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org    , fName(UnderJoin(fGM->getName(), config))
2299589af4e333422639d7e873207dd323fdd6e808commit-bot@chromium.org    , fExpectations(expectations)
23d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    , fContextType(contextType)
24d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    , fSampleCount(sampleCount)
25d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    {}
26d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
27ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgvoid GpuGMTask::draw(GrContextFactory* grFactory) {
2815a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org    SkImageInfo info = SkImageInfo::Make(SkScalarCeilToInt(fGM->width()),
2915a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org                                         SkScalarCeilToInt(fGM->height()),
3028fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org                                         kN32_SkColorType,
310dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org                                         kPremul_SkAlphaType);
32787227d3560bd8021394b76ada2cb184ecf5c919commit-bot@chromium.org    SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, info, fSampleCount));
3315a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org    SkCanvas* canvas = surface->getCanvas();
34d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
3515a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org    canvas->concat(fGM->getInitialTransform());
3615a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org    fGM->draw(canvas);
3715a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org    canvas->flush();
38d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
39d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com    SkBitmap bitmap;
40a3264e53ee3f3c5d6a2c813df7e44b5b96d207f2commit-bot@chromium.org    bitmap.setInfo(info);
4115a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org    canvas->readPixels(&bitmap, 0, 0);
42d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
4399589af4e333422639d7e873207dd323fdd6e808commit-bot@chromium.org    this->spawnChild(SkNEW_ARGS(ExpectationsTask, (*this, fExpectations, bitmap)));
44a7a9f37a3195e8efa1571a3707457c26e2f896a9mtklein@google.com    this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap)));
45d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com}
46d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
47ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.orgbool GpuGMTask::shouldSkip() const {
48787227d3560bd8021394b76ada2cb184ecf5c919commit-bot@chromium.org    return kGPUDisabled || SkToBool(fGM->getFlags() & skiagm::GM::kSkipGPU_Flag);
49d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com}
50d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com
51d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com}  // namespace DM
52