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

Unified Diff: src/ports/SkThread_win.cpp

Issue 19240007: Split TLS implementation into its own translation unit. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Explicitly set static initializers used before explicit assignment. Created 7 years, 5 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 | « src/ports/SkThread_pthread.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ports/SkThread_win.cpp
===================================================================
--- src/ports/SkThread_win.cpp (revision 10093)
+++ src/ports/SkThread_win.cpp (working copy)
@@ -1,4 +1,3 @@
-
/*
* Copyright 2008 The Android Open Source Project
*
@@ -6,11 +5,9 @@
* found in the LICENSE file.
*/
-
#include <windows.h>
#include <intrin.h>
#include "SkThread.h"
-#include "SkTLS.h"
//MSDN says in order to declare an interlocked function for use as an
//intrinsic, include intrin.h and put the function in a #pragma intrinsic
@@ -66,71 +63,3 @@
void SkMutex::release() {
LeaveCriticalSection(reinterpret_cast<CRITICAL_SECTION*>(&fStorage));
}
-
-///////////////////////////////////////////////////////////////////////////
-
-static bool gOnce;
-static DWORD gTlsIndex;
-SK_DECLARE_STATIC_MUTEX(gMutex);
-
-void* SkTLS::PlatformGetSpecific(bool forceCreateTheSlot) {
- if (!forceCreateTheSlot && !gOnce) {
- return NULL;
- }
-
- if (!gOnce) {
- SkAutoMutexAcquire tmp(gMutex);
- if (!gOnce) {
- gTlsIndex = TlsAlloc();
- gOnce = true;
- }
- }
- return TlsGetValue(gTlsIndex);
-}
-
-void SkTLS::PlatformSetSpecific(void* ptr) {
- SkASSERT(gOnce);
- (void)TlsSetValue(gTlsIndex, ptr);
-}
-
-// Call TLS destructors on thread exit. Code based on Chromium's
-// base/threading/thread_local_storage_win.cc
-#ifdef _WIN64
-
-#pragma comment(linker, "/INCLUDE:_tls_used")
-#pragma comment(linker, "/INCLUDE:skia_tls_callback")
-
-#else
-
-#pragma comment(linker, "/INCLUDE:__tls_used")
-#pragma comment(linker, "/INCLUDE:_skia_tls_callback")
-
-#endif
-
-void NTAPI onTLSCallback(PVOID unused, DWORD reason, PVOID unused2) {
- if ((DLL_THREAD_DETACH == reason || DLL_PROCESS_DETACH == reason) && gOnce) {
- void* ptr = TlsGetValue(gTlsIndex);
- if (ptr != NULL) {
- SkTLS::Destructor(ptr);
- TlsSetValue(gTlsIndex, NULL);
- }
- }
-}
-
-extern "C" {
-
-#ifdef _WIN64
-
-#pragma const_seg(".CRT$XLB")
-extern const PIMAGE_TLS_CALLBACK skia_tls_callback;
-const PIMAGE_TLS_CALLBACK skia_tls_callback = onTLSCallback;
-#pragma const_seg()
-
-#else
-
-#pragma data_seg(".CRT$XLB")
-PIMAGE_TLS_CALLBACK skia_tls_callback = onTLSCallback;
-#pragma data_seg()
-
-#endif
-}
« no previous file with comments | « src/ports/SkThread_pthread.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698