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

Side by Side Diff: base/worker_pool_mac.mm

Issue 5682008: Make members of Singleton<T> private and only visible to the singleton type. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 10 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/worker_pool_mac.h" 5 #include "base/worker_pool_mac.h"
6 6
7 #include "base/lazy_instance.h"
7 #include "base/logging.h" 8 #include "base/logging.h"
8 #include "base/mac/scoped_nsautorelease_pool.h" 9 #include "base/mac/scoped_nsautorelease_pool.h"
9 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/scoped_nsobject.h"
10 #include "base/scoped_ptr.h" 12 #include "base/scoped_ptr.h"
11 #import "base/singleton_objc.h"
12 #include "base/task.h" 13 #include "base/task.h"
13 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" 14 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
14 #include "base/worker_pool_linux.h" 15 #include "base/worker_pool_linux.h"
15 16
16 // When C++ exceptions are disabled, the C++ library defines |try| and 17 // When C++ exceptions are disabled, the C++ library defines |try| and
17 // |catch| so as to allow exception-expecting C++ code to build properly when 18 // |catch| so as to allow exception-expecting C++ code to build properly when
18 // language support for exceptions is not present. These macros interfere 19 // language support for exceptions is not present. These macros interfere
19 // with the use of |@try| and |@catch| in Objective-C files such as this one. 20 // with the use of |@try| and |@catch| in Objective-C files such as this one.
20 // Undefine these macros here, after everything has been #included, since 21 // Undefine these macros here, after everything has been #included, since
21 // there will be no C++ uses and only Objective-C uses from this point on. 22 // there will be no C++ uses and only Objective-C uses from this point on.
22 #undef try 23 #undef try
23 #undef catch 24 #undef catch
24 25
25 namespace { 26 namespace {
26 27
27 // |true| to use the Linux WorkerPool implementation for 28 // |true| to use the Linux WorkerPool implementation for
28 // |WorkerPool::PostTask()|. 29 // |WorkerPool::PostTask()|.
29 bool use_linux_workerpool_ = true; 30 bool use_linux_workerpool_ = true;
30 31
31 Lock lock_; 32 Lock lock_;
32 base::Time last_check_; // Last hung-test check. 33 base::Time last_check_; // Last hung-test check.
33 std::vector<id> outstanding_ops_; // Outstanding operations at last check. 34 std::vector<id> outstanding_ops_; // Outstanding operations at last check.
34 size_t running_ = 0; // Operations in |Run()|. 35 size_t running_ = 0; // Operations in |Run()|.
35 size_t outstanding_ = 0; // Operations posted but not completed. 36 size_t outstanding_ = 0; // Operations posted but not completed.
36 37
38 // We use a wrapper struct here for the NSOperationQueue so that the object
39 // can be released when LazyInstance calls our destructor.
40 struct NSOperationQueueWrapper {
41 NSOperationQueueWrapper() {
42 operation_queue.reset([[NSOperationQueue alloc] init]);
43 }
44 scoped_nsobject<NSOperationQueue> operation_queue;
45 };
46
47 static base::LazyInstance<NSOperationQueueWrapper> g_nsoperation_queue(
Evan Martin 2010/12/13 17:38:30 *
48 base::LINKER_INITIALIZED);
49
37 } // namespace 50 } // namespace
38 51
39 namespace worker_pool_mac { 52 namespace worker_pool_mac {
40 53
41 void SetUseLinuxWorkerPool(bool flag) { 54 void SetUseLinuxWorkerPool(bool flag) {
42 use_linux_workerpool_ = flag; 55 use_linux_workerpool_ = flag;
43 } 56 }
44 57
45 } // namespace worker_pool_mac 58 } // namespace worker_pool_mac
46 59
47 @implementation WorkerPoolObjC 60 @implementation WorkerPoolObjC
48 61
49 + (NSOperationQueue*)sharedOperationQueue { 62 + (NSOperationQueue*)sharedOperationQueue {
50 return SingletonObjC<NSOperationQueue>::get(); 63 return g_nsoperation_queue.Get().operation_queue.get();
51 } 64 }
52 65
53 @end // @implementation WorkerPoolObjC 66 @end // @implementation WorkerPoolObjC
54 67
55 // TaskOperation adapts Task->Run() for use in an NSOperationQueue. 68 // TaskOperation adapts Task->Run() for use in an NSOperationQueue.
56 @interface TaskOperation : NSOperation { 69 @interface TaskOperation : NSOperation {
57 @private 70 @private
58 scoped_ptr<Task> task_; 71 scoped_ptr<Task> task_;
59 } 72 }
60 73
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 // Don't report "nothing to report". 209 // Don't report "nothing to report".
197 const size_t kUnaccountedOpsDelta = 10; 210 const size_t kUnaccountedOpsDelta = 10;
198 if (hung_ops.size() > 0 || outstanding_delta > kUnaccountedOpsDelta) { 211 if (hung_ops.size() > 0 || outstanding_delta > kUnaccountedOpsDelta) {
199 UMA_HISTOGRAM_COUNTS_100("OSX.HungWorkers", hung_ops.size()); 212 UMA_HISTOGRAM_COUNTS_100("OSX.HungWorkers", hung_ops.size());
200 UMA_HISTOGRAM_COUNTS_100("OSX.OutstandingDelta", outstanding_delta); 213 UMA_HISTOGRAM_COUNTS_100("OSX.OutstandingDelta", outstanding_delta);
201 UMA_HISTOGRAM_COUNTS_100("OSX.RunningOps", running_ops); 214 UMA_HISTOGRAM_COUNTS_100("OSX.RunningOps", running_ops);
202 } 215 }
203 216
204 return true; 217 return true;
205 } 218 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698