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

Unified Diff: tools/VisualBench.cpp

Issue 1216973002: Move visualbench to its own folder (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: tweaks Created 5 years, 6 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/VisualBench.h ('k') | tools/VisualBench/VisualBench.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/VisualBench.cpp
diff --git a/tools/VisualBench.cpp b/tools/VisualBench.cpp
deleted file mode 100644
index ac53b43167f3cb09e1d6f217f0b65ff34e259039..0000000000000000000000000000000000000000
--- a/tools/VisualBench.cpp
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * 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 "VisualBench.h"
-
-#include "ProcStats.h"
-#include "SkApplication.h"
-#include "SkCanvas.h"
-#include "SkCommandLineFlags.h"
-#include "SkCommonFlags.h"
-#include "SkForceLinking.h"
-#include "SkGraphics.h"
-#include "SkGr.h"
-#include "SkImageDecoder.h"
-#include "SkOSFile.h"
-#include "SkStream.h"
-#include "Stats.h"
-#include "gl/GrGLInterface.h"
-
-__SK_FORCE_IMAGE_DECODER_LINKING;
-
-// Between samples we reset context
-// Between frames we swap buffers
-// Between flushes we call flush on GrContext
-
-DEFINE_int32(gpuFrameLag, 5, "Overestimate of maximum number of frames GPU allows to lag.");
-DEFINE_int32(samples, 10, "Number of times to time each skp.");
-DEFINE_int32(frames, 5, "Number of frames of each skp to render per sample.");
-DEFINE_double(flushMs, 20, "Target flush time in millseconds.");
-DEFINE_double(loopMs, 5, "Target loop time in millseconds.");
-DEFINE_int32(msaa, 0, "Number of msaa samples.");
-DEFINE_bool2(fullscreen, f, true, "Run fullscreen.");
-
-static SkString humanize(double ms) {
- if (FLAGS_verbose) {
- return SkStringPrintf("%llu", (uint64_t)(ms*1e6));
- }
- return HumanizeMs(ms);
-}
-
-#define HUMANIZE(time) humanize(time).c_str()
-
-VisualBench::VisualBench(void* hwnd, int argc, char** argv)
- : INHERITED(hwnd)
- , fCurrentPictureIdx(-1)
- , fCurrentSample(0)
- , fCurrentFrame(0)
- , fFlushes(1)
- , fLoops(1)
- , fState(kPreWarmLoops_State) {
- SkCommandLineFlags::Parse(argc, argv);
-
- // read all the skp file names.
- for (int i = 0; i < FLAGS_skps.count(); i++) {
- if (SkStrEndsWith(FLAGS_skps[i], ".skp")) {
- fRecords.push_back().fFilename = FLAGS_skps[i];
- } else {
- SkOSFile::Iter it(FLAGS_skps[i], ".skp");
- SkString path;
- while (it.next(&path)) {
- fRecords.push_back().fFilename = SkOSPath::Join(FLAGS_skps[i], path.c_str());;
- }
- }
- }
-
- if (fRecords.empty()) {
- SkDebugf("no valid skps found\n");
- }
-
- this->setTitle();
- this->setupBackend();
-
- // Print header
- SkDebugf("curr/maxrss\tloops\tflushes\tmin\tmedian\tmean\tmax\tstddev\tbench\n");
-}
-
-VisualBench::~VisualBench() {
- INHERITED::detach();
-}
-
-void VisualBench::setTitle() {
- SkString title("VisualBench");
- INHERITED::setTitle(title.c_str());
-}
-
-SkSurface* VisualBench::createSurface() {
- SkSurfaceProps props(INHERITED::getSurfaceProps());
- return SkSurface::NewRenderTargetDirect(fRenderTarget, &props);
-}
-
-bool VisualBench::setupBackend() {
- this->setColorType(kRGBA_8888_SkColorType);
- this->setVisibleP(true);
- this->setClipToBounds(false);
-
- if (FLAGS_fullscreen) {
- if (!this->makeFullscreen()) {
- SkDebugf("Could not go fullscreen!");
- }
- }
- if (!this->attach(kNativeGL_BackEndType, FLAGS_msaa, &fAttachmentInfo)) {
- SkDebugf("Not possible to create backend.\n");
- INHERITED::detach();
- return false;
- }
-
- this->setVsync(false);
- this->resetContext();
- return true;
-}
-
-void VisualBench::resetContext() {
- fInterface.reset(GrGLCreateNativeInterface());
- SkASSERT(fInterface);
-
- // setup contexts
- fContext.reset(GrContext::Create(kOpenGL_GrBackend, (GrBackendContext)fInterface.get()));
- SkASSERT(fContext);
-
- // setup rendertargets
- this->setupRenderTarget();
-}
-
-void VisualBench::setupRenderTarget() {
- if (fContext) {
- fRenderTarget.reset(this->renderTarget(fAttachmentInfo, fInterface, fContext));
- }
-}
-
-inline void VisualBench::renderFrame(SkCanvas* canvas) {
- for (int flush = 0; flush < fFlushes; flush++) {
- for (int loop = 0; loop < fLoops; loop++) {
- canvas->drawPicture(fPicture);
- }
- canvas->flush();
- }
- INHERITED::present();
-}
-
-void VisualBench::printStats() {
- const SkTArray<double>& measurements = fRecords[fCurrentPictureIdx].fMeasurements;
- SkString shortName = SkOSPath::Basename(fRecords[fCurrentPictureIdx].fFilename.c_str());
- if (FLAGS_verbose) {
- for (int i = 0; i < measurements.count(); i++) {
- SkDebugf("%s ", HUMANIZE(measurements[i]));
- }
- SkDebugf("%s\n", shortName.c_str());
- } else {
- SkASSERT(measurements.count());
- Stats stats(measurements);
- const double stdDevPercent = 100 * sqrt(stats.var) / stats.mean;
- SkDebugf("%4d/%-4dMB\t%d\t%d\t%s\t%s\t%s\t%s\t%.0f%%\t%s\n",
- sk_tools::getCurrResidentSetSizeMB(),
- sk_tools::getMaxResidentSetSizeMB(),
- fLoops,
- fFlushes,
- HUMANIZE(stats.min),
- HUMANIZE(stats.median),
- HUMANIZE(stats.mean),
- HUMANIZE(stats.max),
- stdDevPercent,
- shortName.c_str());
- }
-}
-
-bool VisualBench::advanceRecordIfNecessary() {
- if (fPicture) {
- return true;
- }
- ++fCurrentPictureIdx;
- while (true) {
- if (fCurrentPictureIdx >= fRecords.count()) {
- return false;
- }
- if (this->loadPicture()) {
- return true;
- }
- fRecords.removeShuffle(fCurrentPictureIdx);
- }
-}
-
-bool VisualBench::loadPicture() {
- const char* fileName = fRecords[fCurrentPictureIdx].fFilename.c_str();
- SkFILEStream stream(fileName);
- if (stream.isValid()) {
- fPicture.reset(SkPicture::CreateFromStream(&stream));
- if (SkToBool(fPicture)) {
- return true;
- }
- }
- SkDebugf("couldn't load picture at \"%s\"\n", fileName);
- return false;
-}
-
-void VisualBench::preWarm(State nextState) {
- if (fCurrentFrame >= FLAGS_gpuFrameLag) {
- // we currently time across all frames to make sure we capture all GPU work
- fState = nextState;
- fCurrentFrame = 0;
- fTimer.start();
- } else {
- fCurrentFrame++;
- }
-}
-
-void VisualBench::draw(SkCanvas* canvas) {
- if (!this->advanceRecordIfNecessary()) {
- this->closeWindow();
- return;
- }
- this->renderFrame(canvas);
- switch (fState) {
- case kPreWarmLoops_State: {
- this->preWarm(kTuneLoops_State);
- break;
- }
- case kTuneLoops_State: {
- if (1 << 30 == fLoops) {
- // We're about to wrap. Something's wrong with the bench.
- SkDebugf("InnerLoops wrapped\n");
- fLoops = 0;
- } else {
- fTimer.end();
- double elapsed = fTimer.fWall;
- if (elapsed > FLAGS_loopMs) {
- fState = kPreWarmTiming_State;
-
- // Scale back the number of loops
- fLoops = (int)ceil(fLoops * FLAGS_loopMs / elapsed);
- fFlushes = (int)ceil(FLAGS_flushMs / elapsed);
- } else {
- fState = kPreWarmLoops_State;
- fLoops *= 2;
- }
-
- fCurrentFrame = 0;
- fTimer = WallTimer();
- this->resetContext();
- }
- break;
- }
- case kPreWarmTiming_State: {
- this->preWarm(kTiming_State);
- break;
- }
- case kTiming_State: {
- if (fCurrentFrame >= FLAGS_frames) {
- fTimer.end();
- fRecords[fCurrentPictureIdx].fMeasurements.push_back(
- fTimer.fWall / (FLAGS_frames * fLoops * fFlushes));
- if (fCurrentSample++ >= FLAGS_samples) {
- fState = kPreWarmLoops_State;
- this->printStats();
- fPicture.reset(NULL);
- fCurrentSample = 0;
- fFlushes = 1;
- fLoops = 1;
- } else {
- fState = kPreWarmTiming_State;
- }
- fTimer = WallTimer();
- this->resetContext();
- fCurrentFrame = 0;
- } else {
- fCurrentFrame++;
- }
- break;
- }
- }
-
- // Invalidate the window to force a redraw. Poor man's animation mechanism.
- this->inval(NULL);
-}
-
-void VisualBench::onSizeChange() {
- this->setupRenderTarget();
-}
-
-bool VisualBench::onHandleChar(SkUnichar unichar) {
- return true;
-}
-
-// Externally declared entry points
-void application_init() {
- SkGraphics::Init();
- SkEvent::Init();
-}
-
-void application_term() {
- SkEvent::Term();
- SkGraphics::Term();
-}
-
-SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) {
- return new VisualBench(hwnd, argc, argv);
-}
-
« no previous file with comments | « tools/VisualBench.h ('k') | tools/VisualBench/VisualBench.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698