9e61bb7815
Make the Sk GL context class, SkGLNativeContext, an abstract base class. Before, it depended on ifdefs to implement the platform dependent polymorphism. Move the logic to subclasses of the various platform implementations. This a step to enable Skia embedders to compile dm and bench_pictures. The concrete goal is to support running these test apps with Chromium command buffer. With this change, Chromium can implement its own version of SkGLNativeContext that uses command buffer, and host the implementation in its own repository. Implements the above by renaming the SkGLContextHelper to SkGLContext and removing the unneeded SkGLNativeContext. Also removes SkGLNativeContext::AutoRestoreContext functionality, it appeared to be unused: no use in Skia code, and no tests. BUG=skia:2992 Committed: https://skia.googlesource.com/skia/+/a90ed4e83897b45d6331ee4c54e1edd4054de9a8 Review URL: https://codereview.chromium.org/630843002
119 lines
2.9 KiB
C++
119 lines
2.9 KiB
C++
/*
|
|
* Copyright 2011 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include "Test.h"
|
|
|
|
#include "SkCommandLineFlags.h"
|
|
#include "SkError.h"
|
|
#include "SkString.h"
|
|
#include "SkTArray.h"
|
|
#include "SkTime.h"
|
|
|
|
#if SK_SUPPORT_GPU
|
|
#include "GrContext.h"
|
|
#include "gl/SkGLContext.h"
|
|
#else
|
|
class GrContext;
|
|
#endif
|
|
|
|
DEFINE_string2(tmpDir, t, NULL, "tmp directory for tests to use.");
|
|
|
|
using namespace skiatest;
|
|
|
|
Reporter::Reporter() : fTestCount(0) {
|
|
}
|
|
|
|
void Reporter::startTest(Test* test) {
|
|
this->onStart(test);
|
|
}
|
|
|
|
void Reporter::reportFailed(const SkString& desc) {
|
|
this->onReportFailed(desc);
|
|
}
|
|
|
|
void Reporter::endTest(Test* test) {
|
|
this->onEnd(test);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
Test::Test() : fReporter(NULL), fPassed(true) {}
|
|
|
|
Test::~Test() {
|
|
SkSafeUnref(fReporter);
|
|
}
|
|
|
|
void Test::setReporter(Reporter* r) {
|
|
SkRefCnt_SafeAssign(fReporter, r);
|
|
}
|
|
|
|
const char* Test::getName() {
|
|
if (fName.size() == 0) {
|
|
this->onGetName(&fName);
|
|
}
|
|
return fName.c_str();
|
|
}
|
|
|
|
class LocalReporter : public Reporter {
|
|
public:
|
|
explicit LocalReporter(Reporter* reporterToMimic) : fReporter(reporterToMimic) {}
|
|
|
|
int numFailures() const { return fFailures.count(); }
|
|
const SkString& failure(int i) const { return fFailures[i]; }
|
|
|
|
protected:
|
|
virtual void onReportFailed(const SkString& desc) SK_OVERRIDE {
|
|
fFailures.push_back(desc);
|
|
}
|
|
|
|
// Proxy down to fReporter. We assume these calls are threadsafe.
|
|
virtual bool allowExtendedTest() const SK_OVERRIDE {
|
|
return fReporter->allowExtendedTest();
|
|
}
|
|
|
|
virtual void bumpTestCount() SK_OVERRIDE {
|
|
fReporter->bumpTestCount();
|
|
}
|
|
|
|
virtual bool verbose() const SK_OVERRIDE {
|
|
return fReporter->verbose();
|
|
}
|
|
|
|
private:
|
|
Reporter* fReporter; // Unowned.
|
|
SkTArray<SkString> fFailures;
|
|
};
|
|
|
|
void Test::run() {
|
|
// Clear the Skia error callback before running any test, to ensure that tests
|
|
// don't have unintended side effects when running more than one.
|
|
SkSetErrorCallback( NULL, NULL );
|
|
|
|
// Tell (likely shared) fReporter that this test has started.
|
|
fReporter->startTest(this);
|
|
|
|
const SkMSec start = SkTime::GetMSecs();
|
|
// Run the test into a LocalReporter so we know if it's passed or failed without interference
|
|
// from other tests that might share fReporter.
|
|
LocalReporter local(fReporter);
|
|
this->onRun(&local);
|
|
fPassed = local.numFailures() == 0;
|
|
fElapsed = SkTime::GetMSecs() - start;
|
|
|
|
// Now tell fReporter about any failures and wrap up.
|
|
for (int i = 0; i < local.numFailures(); i++) {
|
|
fReporter->reportFailed(local.failure(i));
|
|
}
|
|
fReporter->endTest(this);
|
|
|
|
}
|
|
|
|
SkString Test::GetTmpDir() {
|
|
const char* tmpDir = FLAGS_tmpDir.isEmpty() ? NULL : FLAGS_tmpDir[0];
|
|
return SkString(tmpDir);
|
|
}
|