| /* |
| * Copyright 2012 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "SkGraphics.h" |
| #include "SkPaint.h" |
| #include "SkTLS.h" |
| #include "Test.h" |
| #include <atomic> |
| #include <thread> |
| |
| static void thread_main() { |
| SkGraphics::SetTLSFontCacheLimit(1 * 1024 * 1024); |
| |
| const char text[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; |
| size_t len = strlen(text); |
| |
| SkPaint paint; |
| |
| for (int j = 0; j < 10; ++j) { |
| for (int i = 9; i <= 48; ++i) { |
| paint.setTextSize(SkIntToScalar(i)); |
| paint.setAntiAlias(false); |
| paint.measureText(text, len); |
| paint.setAntiAlias(true); |
| paint.measureText(text, len); |
| } |
| } |
| } |
| |
| template <typename Fn> |
| static void test_threads(Fn fn) { |
| std::thread threads[8]; |
| |
| for (auto& thread : threads) { |
| thread = std::thread(fn); |
| } |
| for (auto& thread : threads) { |
| thread.join(); |
| } |
| } |
| |
| static std::atomic<int> gCounter{0}; |
| |
| static void* fake_create_TLS() { |
| gCounter++; |
| return nullptr; |
| } |
| static void fake_delete_TLS(void*) { |
| gCounter--; |
| } |
| |
| DEF_TEST(TLS, reporter) { |
| // TODO: Disabled for now to work around |
| // http://code.google.com/p/skia/issues/detail?id=619 |
| // ('flaky segfault in TLS test on Shuttle_Ubuntu12 buildbots') |
| if( false ) test_threads(&thread_main); |
| |
| // Test to ensure that at thread destruction, TLS destructors |
| // have been called. |
| test_threads([] { |
| SkTLS::Get(fake_create_TLS, fake_delete_TLS); |
| }); |
| REPORTER_ASSERT(reporter, 0 == gCounter.load()); |
| } |