summaryrefslogtreecommitdiffstats
path: root/skia
diff options
context:
space:
mode:
authorpiman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-24 22:44:26 +0000
committerpiman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-24 22:44:26 +0000
commit68c1e256f53934a4a37b5f5c47f357eb4d52713d (patch)
treef667e110bd02c21b3e73fb78b5861cc2f366d33e /skia
parent8acada4fac5b3ee51e99c90e9491ec7ef13bac0d (diff)
downloadchromium_src-68c1e256f53934a4a37b5f5c47f357eb4d52713d.zip
chromium_src-68c1e256f53934a4a37b5f5c47f357eb4d52713d.tar.gz
chromium_src-68c1e256f53934a4a37b5f5c47f357eb4d52713d.tar.bz2
Remove mutex from skia's atomic operations
BUG=none - high CPU usage of locks TEST=run chrome on Atom-based device, run perf, check that sk_atomic_inc/dec isn't hot Review URL: http://codereview.chromium.org/3441031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@60543 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia')
-rw-r--r--skia/ext/SkThread_chrome.cc45
-rw-r--r--skia/skia.gyp5
2 files changed, 48 insertions, 2 deletions
diff --git a/skia/ext/SkThread_chrome.cc b/skia/ext/SkThread_chrome.cc
new file mode 100644
index 0000000..4693309
--- /dev/null
+++ b/skia/ext/SkThread_chrome.cc
@@ -0,0 +1,45 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/skia/include/core/SkThread.h"
+
+#include <new>
+
+#include "base/atomicops.h"
+#include "base/basictypes.h"
+#include "base/lock.h"
+#include "base/logging.h"
+
+int32_t sk_atomic_inc(int32_t* addr) {
+ // sk_atomic_inc is expected to return the old value, Barrier_AtomicIncrement
+ // returns the new value.
+ return base::subtle::Barrier_AtomicIncrement(addr, 1) - 1;
+}
+
+int32_t sk_atomic_dec(int32_t* addr) {
+ // sk_atomic_inc is expected to return the old value, Barrier_AtomicIncrement
+ // returns the new value.
+ return base::subtle::Barrier_AtomicIncrement(addr, -1) + 1;
+}
+
+SkMutex::SkMutex(bool isGlobal) : fIsGlobal(isGlobal) {
+ COMPILE_ASSERT(sizeof(Lock) <= sizeof(fStorage), Lock_is_too_big_for_SkMutex);
+ Lock* lock = reinterpret_cast<Lock*>(fStorage);
+ new(lock) Lock();
+}
+
+SkMutex::~SkMutex() {
+ Lock* lock = reinterpret_cast<Lock*>(fStorage);
+ lock->~Lock();
+}
+
+void SkMutex::acquire() {
+ Lock* lock = reinterpret_cast<Lock*>(fStorage);
+ lock->Acquire();
+}
+
+void SkMutex::release() {
+ Lock* lock = reinterpret_cast<Lock*>(fStorage);
+ lock->Release();
+}
diff --git a/skia/skia.gyp b/skia/skia.gyp
index a873237..5be7398 100644
--- a/skia/skia.gyp
+++ b/skia/skia.gyp
@@ -375,7 +375,7 @@
#'../third_party/skia/src/ports/SkOSEvent_dummy.cpp',
'../third_party/skia/src/ports/SkOSFile_stdio.cpp',
#'../third_party/skia/src/ports/SkThread_none.cpp',
- '../third_party/skia/src/ports/SkThread_pthread.cpp',
+ #'../third_party/skia/src/ports/SkThread_pthread.cpp',
'../third_party/skia/src/ports/SkThread_win.cpp',
'../third_party/skia/src/ports/SkTime_Unix.cpp',
#'../third_party/skia/src/ports/SkXMLParser_empty.cpp',
@@ -512,6 +512,7 @@
'ext/google_logging.cc',
'ext/image_operations.cc',
'ext/image_operations.h',
+ 'ext/SkThread_chrome.cc',
'ext/platform_canvas.h',
'ext/platform_canvas.cc',
'ext/platform_canvas_linux.cc',
@@ -647,8 +648,8 @@
[ 'OS == "win"', {
'sources!': [
'../third_party/skia/src/core/SkMMapStream.cpp',
- '../third_party/skia/src/ports/SkThread_pthread.cpp',
'../third_party/skia/src/ports/SkTime_Unix.cc',
+ 'ext/SkThread_chrome.cc',
],
'include_dirs': [
'config/win',