blob: 5d15d7ef2071c6ea7d35ccd027ff423d598e12b2 [file] [log] [blame]
joshualitt962cc982015-06-30 07:43:14 -07001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 *
7 */
8
9#include "VisualSKPBench.h"
10
cdaltone6d20242015-10-26 13:45:29 -070011#if SK_SUPPORT_GPU
12#include "GrContext.h"
13#endif
14
joshualitt962cc982015-06-30 07:43:14 -070015VisualSKPBench::VisualSKPBench(const char* name, const SkPicture* pic)
16 : fPic(SkRef(pic))
cdalton0f6cca82015-11-24 08:54:29 -080017 , fCullRect(fPic->cullRect().roundOut())
joshualitt962cc982015-06-30 07:43:14 -070018 , fName(name) {
19 fUniqueName.printf("%s", name);
20}
21
22const char* VisualSKPBench::onGetName() {
23 return fName.c_str();
24}
25
26const char* VisualSKPBench::onGetUniqueName() {
27 return fUniqueName.c_str();
28}
29
30bool VisualSKPBench::isSuitableFor(Backend backend) {
31 return backend != kNonRendering_Backend;
32}
33
cdalton0f6cca82015-11-24 08:54:29 -080034SkIPoint VisualSKPBench::onGetSize() {
35 return SkIPoint::Make(fCullRect.width(), fCullRect.height());
36}
37
mtkleina1ebeb22015-10-01 09:43:39 -070038void VisualSKPBench::onDraw(int loops, SkCanvas* canvas) {
cdalton0f6cca82015-11-24 08:54:29 -080039 bool isOffset = SkToBool(fCullRect.left() | fCullRect.top());
40 if (isOffset) {
41 canvas->save();
42 canvas->translate(SkIntToScalar(-fCullRect.left()), SkIntToScalar(-fCullRect.top()));
43 }
44
joshualitt962cc982015-06-30 07:43:14 -070045 for (int i = 0; i < loops; i++) {
46 canvas->drawPicture(fPic);
cdaltone6d20242015-10-26 13:45:29 -070047#if SK_SUPPORT_GPU
48 // Ensure the GrContext doesn't batch across draw loops.
49 if (GrContext* context = canvas->getGrContext()) {
50 context->flush();
51 }
52#endif
joshualitt962cc982015-06-30 07:43:14 -070053 }
cdalton0f6cca82015-11-24 08:54:29 -080054
55 if (isOffset) {
56 canvas->restore();
57 }
joshualitt962cc982015-06-30 07:43:14 -070058}