blob: 1147110c2d11f599de033033bd7b023b42ade00f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
// Copyright (c) 2008 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 "base/worker_pool.h"
#import <Foundation/Foundation.h>
#include "base/logging.h"
#import "base/singleton_objc.h"
#include "base/task.h"
// TaskOperation adapts Task->Run() for use in an NSOperationQueue.
@interface TaskOperation : NSOperation {
@private
Task* task_; // (strong)
}
// Returns an autoreleased instance of TaskOperation. See -initWithTask: for
// details.
+ (id)taskOperationWithTask:(Task*)task;
// Designated initializer. |task| is adopted as the Task* whose Run method
// this operation will call when executed.
- (id)initWithTask:(Task*)task;
@end
@implementation TaskOperation
+ (id)taskOperationWithTask:(Task*)task {
return [[[TaskOperation alloc] initWithTask:task] autorelease];
}
- (id)init {
return [self initWithTask:NULL];
}
- (id)initWithTask:(Task*)task {
if ((self = [super init])) {
task_ = task;
}
return self;
}
- (void)main {
DCHECK(task_) << "-[TaskOperation main] called with no task";
task_->Run();
delete task_;
task_ = NULL;
}
- (void)dealloc {
DCHECK(!task_) << "-[TaskOperation dealloc] called on unused TaskOperation";
delete task_;
[super dealloc];
}
@end
bool WorkerPool::PostTask(const tracked_objects::Location& from_here,
Task* task, bool task_is_slow) {
// Ignore |task_is_slow|, it doesn't map directly to any tunable aspect of
// an NSOperation.
task->SetBirthPlace(from_here);
NSOperationQueue* operation_queue = SingletonObjC<NSOperationQueue>::get();
[operation_queue addOperation:[TaskOperation taskOperationWithTask:task]];
return true;
}
|