02802f64ea
Reason for revert: Breaking the roll. E.g. on android_chromium_gn_compile_dbg: FAILED: /b/build/goma/gomacc ../../third_party/android_tools/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -MMD -MF obj/skia/ext/libskia.SkMemory_new_handler.o.d -DV8_DEPRECATION_WARNINGS -DCLD_VERSION=1 -DENABLE_NOTIFICATIONS -DENABLE_BROWSER_CDMS -DENABLE_PRINTING=1 -DENABLE_BASIC_PRINTING=1 -DDONT_EMBED_BUILD_METADATA -DUSE_OPENSSL=1 -DUSE_OPENSSL_CERTS=1 -DNO_TCMALLOC -DDISABLE_NACL -DENABLE_CONFIGURATION_POLICY -DENABLE_SUPERVISED_USERS=1 -DENABLE_AUTOFILL_DIALOG=1 -DUSE_PROPRIETARY_CODECS -DV8_USE_EXTERNAL_STARTUP_DATA -DVIDEO_HOLE=1 -DMOBILE_SAFE_BROWSING -DSAFE_BROWSING_SERVICE -DCHROMIUM_BUILD -D_FILE_OFFSET_BITS=64 -DANDROID -DHAVE_SYS_UIO_H -DCOMPONENT_BUILD -D__GNU_SOURCE=1 -D_DEBUG -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DWTF_USE_DYNAMIC_ANNOTATIONS=1 -DSKIA_IMPLEMENTATION=1 -DSK_ARM_HAS_OPTIONAL_NEON -DSK_GAMMA_APPLY_TO_A8 -DSK_GAMMA_EXPONENT=1.4 -DSK_GAMMA_CONTRAST=0.0 -DSK_DEFAULT_FONT_CACHE_LIMIT=1048576 -DSK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS -DSKIA_DLL -DGR_GL_IGNORE_ES3_MSAA=0 -DSK_SUPPORT_GPU=1 -DSK_BUILD_FOR_ANDROID -DUSE_CHROMIUM_SKIA -DXML_STATIC -I../.. -Igen -I../../third_party/skia/include/private -I../../third_party/skia/src/core -I../../third_party/skia/src/image -I../../third_party/skia/src/opts -I../../third_party/skia/src/pdf -I../../third_party/skia/src/ports -I../../third_party/skia/src/sfnt -I../../third_party/skia/src/utils -I../../third_party/skia/src/lazy -I../../skia/config -I../../skia/ext -I../../third_party/skia/include/c -I../../third_party/skia/include/config -I../../third_party/skia/include/core -I../../third_party/skia/include/effects -I../../third_party/skia/include/images -I../../third_party/skia/include/lazy -I../../third_party/skia/include/pathops -I../../third_party/skia/include/pdf -I../../third_party/skia/include/pipe -I../../third_party/skia/include/ports -I../../third_party/skia/include/utils -I../../third_party/skia/include/gpu -I../../third_party/skia/src/gpu -I../../third_party/zlib -I../../third_party/expat/files/lib -I../../third_party/freetype-android/include -I../../third_party/freetype-android/src/include -I../../third_party/android_tools/ndk/sources/android/cpufeatures -fno-strict-aliasing -march=armv7-a -mfloat-abi=softfp -mtune=generic-armv7-a -mthumb -mthumb-interwork -fno-tree-sra -fno-caller-saves -funwind-tables -fPIC -pipe -ffunction-sections -funwind-tables -fno-short-enums -finline-limit=64 -mfpu=vfpv3-d16 -isystem../../third_party/android_tools/ndk/sources/cxx-stl/llvm-libc++/libcxx/include -isystem../../third_party/android_tools/ndk/sources/cxx-stl/llvm-libc++abi/libcxxabi/include -isystem../../third_party/android_tools/ndk/sources/android/support/include -fvisibility=hidden --sysroot=/b/build/slave/android_chromium_gn/build/src/third_party/android_tools/ndk/platforms/android-16/arch-arm -Os -fdata-sections -ffunction-sections -fomit-frame-pointer -g1 -Wno-format -Wendif-labels -Werror -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi -Wno-extra -Wno-ignored-qualifiers -Wno-type-limits -Wno-unused-local-typedefs -fno-threadsafe-statics -fvisibility-inlines-hidden -std=gnu++11 -fno-rtti -fno-exceptions -Wno-deprecated -Wno-narrowing -Wno-literal-suffix -Wno-error=c++0x-compat -Wno-non-virtual-dtor -Wno-sign-promo -c ../../skia/ext/SkMemory_new_handler.cpp -o obj/skia/ext/libskia.SkMemory_new_handler.o ../../skia/ext/SkMemory_new_handler.cpp:12:52: fatal error: third_party/skia/include/core/SkThread.h: No such file or directory #include "third_party/skia/include/core/SkThread.h" Original issue's description: > Remove SkThread.h, include SkMutex.h or SkAtomics.h as appropriate. > > SkThread.h doesn't do anything anymore execept include those two, > and thankfully, it doesn't seem to be mentioned outside Skia. > > No public API changes. > TBR=reed@google.com > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/c50acf2321d7a934c80d754e9cbe936dfb8eb4cc TBR=mtklein@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/1214603003
231 lines
6.3 KiB
C++
231 lines
6.3 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 "CrashHandler.h"
|
|
#include "OverwriteLine.h"
|
|
#include "Resources.h"
|
|
#include "SkCommonFlags.h"
|
|
#include "SkGraphics.h"
|
|
#include "SkOSFile.h"
|
|
#include "SkRunnable.h"
|
|
#include "SkTArray.h"
|
|
#include "SkTaskGroup.h"
|
|
#include "SkTemplates.h"
|
|
#include "SkThread.h"
|
|
#include "SkTime.h"
|
|
#include "Test.h"
|
|
|
|
#if SK_SUPPORT_GPU
|
|
#include "GrContext.h"
|
|
#include "GrContextFactory.h"
|
|
#endif
|
|
|
|
using namespace skiatest;
|
|
|
|
DEFINE_bool2(extendedTest, x, false, "run extended tests for pathOps.");
|
|
|
|
// need to explicitly declare this, or we get some weird infinite loop llist
|
|
template TestRegistry* TestRegistry::gHead;
|
|
|
|
// The threads report back to this object when they are done.
|
|
class Status {
|
|
public:
|
|
explicit Status(int total)
|
|
: fDone(0), fTestCount(0), fFailCount(0), fTotal(total) {}
|
|
// Threadsafe.
|
|
void endTest(const char* testName,
|
|
bool success,
|
|
SkMSec elapsed,
|
|
int testCount) {
|
|
const int done = 1 + sk_atomic_inc(&fDone);
|
|
for (int i = 0; i < testCount; ++i) {
|
|
sk_atomic_inc(&fTestCount);
|
|
}
|
|
if (!success) {
|
|
SkDebugf("\n---- %s FAILED", testName);
|
|
}
|
|
|
|
SkString prefix(kSkOverwriteLine);
|
|
SkString time;
|
|
if (FLAGS_verbose) {
|
|
prefix.printf("\n");
|
|
time.printf("%5dms ", elapsed);
|
|
}
|
|
SkDebugf("%s[%3d/%3d] %s%s", prefix.c_str(), done, fTotal, time.c_str(),
|
|
testName);
|
|
}
|
|
|
|
void reportFailure() { sk_atomic_inc(&fFailCount); }
|
|
|
|
int32_t testCount() { return fTestCount; }
|
|
int32_t failCount() { return fFailCount; }
|
|
|
|
private:
|
|
int32_t fDone; // atomic
|
|
int32_t fTestCount; // atomic
|
|
int32_t fFailCount; // atomic
|
|
const int fTotal;
|
|
};
|
|
|
|
// Deletes self when run.
|
|
class SkTestRunnable : public SkRunnable {
|
|
public:
|
|
SkTestRunnable(const Test& test,
|
|
Status* status,
|
|
GrContextFactory* grContextFactory = NULL)
|
|
: fTest(test), fStatus(status), fGrContextFactory(grContextFactory) {}
|
|
|
|
virtual void run() {
|
|
struct TestReporter : public skiatest::Reporter {
|
|
public:
|
|
TestReporter() : fError(false), fTestCount(0) {}
|
|
void bumpTestCount() override { ++fTestCount; }
|
|
bool allowExtendedTest() const override {
|
|
return FLAGS_extendedTest;
|
|
}
|
|
bool verbose() const override { return FLAGS_veryVerbose; }
|
|
void reportFailed(const skiatest::Failure& failure) override {
|
|
SkDebugf("\nFAILED: %s", failure.toString().c_str());
|
|
fError = true;
|
|
}
|
|
bool fError;
|
|
int fTestCount;
|
|
} reporter;
|
|
|
|
const SkMSec start = SkTime::GetMSecs();
|
|
fTest.proc(&reporter, fGrContextFactory);
|
|
SkMSec elapsed = SkTime::GetMSecs() - start;
|
|
if (reporter.fError) {
|
|
fStatus->reportFailure();
|
|
}
|
|
fStatus->endTest(fTest.name, !reporter.fError, elapsed,
|
|
reporter.fTestCount);
|
|
SkDELETE(this);
|
|
}
|
|
|
|
private:
|
|
Test fTest;
|
|
Status* fStatus;
|
|
GrContextFactory* fGrContextFactory;
|
|
};
|
|
|
|
static bool should_run(const char* testName, bool isGPUTest) {
|
|
if (SkCommandLineFlags::ShouldSkip(FLAGS_match, testName)) {
|
|
return false;
|
|
}
|
|
if (!FLAGS_cpu && !isGPUTest) {
|
|
return false;
|
|
}
|
|
if (!FLAGS_gpu && isGPUTest) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
int test_main();
|
|
int test_main() {
|
|
SetupCrashHandler();
|
|
|
|
SkAutoGraphics ag;
|
|
|
|
{
|
|
SkString header("Skia UnitTests:");
|
|
if (!FLAGS_match.isEmpty()) {
|
|
header.appendf(" --match");
|
|
for (int index = 0; index < FLAGS_match.count(); ++index) {
|
|
header.appendf(" %s", FLAGS_match[index]);
|
|
}
|
|
}
|
|
SkString tmpDir = skiatest::GetTmpDir();
|
|
if (!tmpDir.isEmpty()) {
|
|
header.appendf(" --tmpDir %s", tmpDir.c_str());
|
|
}
|
|
SkString resourcePath = GetResourcePath();
|
|
if (!resourcePath.isEmpty()) {
|
|
header.appendf(" --resourcePath %s", resourcePath.c_str());
|
|
}
|
|
#ifdef SK_DEBUG
|
|
header.append(" SK_DEBUG");
|
|
#else
|
|
header.append(" SK_RELEASE");
|
|
#endif
|
|
header.appendf(" skia_arch_width=%d", (int)sizeof(void*) * 8);
|
|
if (FLAGS_veryVerbose) {
|
|
header.appendf("\n");
|
|
}
|
|
SkDebugf("%s", header.c_str());
|
|
}
|
|
|
|
|
|
// Count tests first.
|
|
int total = 0;
|
|
int toRun = 0;
|
|
|
|
for (const TestRegistry* iter = TestRegistry::Head(); iter;
|
|
iter = iter->next()) {
|
|
const Test& test = iter->factory();
|
|
if (should_run(test.name, test.needsGpu)) {
|
|
toRun++;
|
|
}
|
|
total++;
|
|
}
|
|
|
|
// Now run them.
|
|
int skipCount = 0;
|
|
|
|
SkTaskGroup::Enabler enabled(FLAGS_threads);
|
|
SkTaskGroup cpuTests;
|
|
SkTArray<const Test*> gpuTests;
|
|
|
|
Status status(toRun);
|
|
for (const TestRegistry* iter = TestRegistry::Head(); iter;
|
|
iter = iter->next()) {
|
|
const Test& test = iter->factory();
|
|
if (!should_run(test.name, test.needsGpu)) {
|
|
++skipCount;
|
|
} else if (test.needsGpu) {
|
|
gpuTests.push_back(&test);
|
|
} else {
|
|
cpuTests.add(SkNEW_ARGS(SkTestRunnable, (test, &status)));
|
|
}
|
|
}
|
|
|
|
GrContextFactory* grContextFactoryPtr = NULL;
|
|
#if SK_SUPPORT_GPU
|
|
// Give GPU tests a context factory if that makes sense on this machine.
|
|
GrContextFactory grContextFactory;
|
|
grContextFactoryPtr = &grContextFactory;
|
|
|
|
#endif
|
|
|
|
// Run GPU tests on this thread.
|
|
for (int i = 0; i < gpuTests.count(); i++) {
|
|
SkNEW_ARGS(SkTestRunnable, (*gpuTests[i], &status, grContextFactoryPtr))
|
|
->run();
|
|
}
|
|
|
|
// Block until threaded tests finish.
|
|
cpuTests.wait();
|
|
|
|
if (FLAGS_verbose) {
|
|
SkDebugf(
|
|
"\nFinished %d tests, %d failures, %d skipped. "
|
|
"(%d internal tests)",
|
|
toRun, status.failCount(), skipCount, status.testCount());
|
|
}
|
|
|
|
SkDebugf("\n");
|
|
return (status.failCount() == 0) ? 0 : 1;
|
|
}
|
|
|
|
#if !defined(SK_BUILD_FOR_IOS)
|
|
int main(int argc, char** argv) {
|
|
SkCommandLineFlags::Parse(argc, argv);
|
|
return test_main();
|
|
}
|
|
#endif
|