skia2/bench/nanobenchAndroid.cpp
cdalton d416a5b10f Implement SkGLContext swapBuffers with fence syncs
Improves the GPU measuring accuracy of nanobench by using fence syncs.
Fence syncs are very widely supported and available on almost every
platform.

NO_MERGE_BUILDS
BUG=skia:

Review URL: https://codereview.chromium.org/1194783003
2015-06-23 13:23:44 -07:00

61 lines
1.4 KiB
C++

/*
* Copyright 2015 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "nanobenchAndroid.h"
#include "AnimationContext.h"
#include "IContextFactory.h"
#include "SkiaCanvasProxy.h"
#include "android/rect.h"
#include "android/native_window.h"
#include "renderthread/TimeLord.h"
/* These functions are only compiled in the Android Framework. */
HWUITarget::HWUITarget(const Config& c, Benchmark* bench) : Target(c) { }
void HWUITarget::setup() {
this->renderer.proxy->fence();
}
SkCanvas* HWUITarget::beginTiming(SkCanvas* canvas) {
SkCanvas* targetCanvas = this->renderer.prepareToDraw();
if (targetCanvas) {
this->fc.reset(targetCanvas);
canvas = &this->fc;
// This might minimally distort timing, but canvas isn't valid outside the timer.
canvas->clear(SK_ColorWHITE);
}
return canvas;
}
void HWUITarget::endTiming() {
this->renderer.finishDrawing();
}
void HWUITarget::fence() {
this->renderer.proxy->fence();
}
bool HWUITarget::needsFrameTiming(int* frameLag) const {
extern int FLAGS_gpuFrameLag;
*frameLag = FLAGS_gpuFrameLag;
return true;
}
bool HWUITarget::init(SkImageInfo info, Benchmark* bench) {
this->renderer.initialize({bench->getSize().x(), bench->getSize().y()});
return true;
}
bool HWUITarget::capturePixels(SkBitmap* bmp) {
return this->renderer.capturePixels(bmp);
}