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

Side by Side Diff: base/task.h

Issue 7066006: Store information about invoked RunnableFunction on stack to aid debugging of canary channel cras... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/debug/alias.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #ifndef BASE_TASK_H_ 5 #ifndef BASE_TASK_H_
6 #define BASE_TASK_H_ 6 #define BASE_TASK_H_
7 #pragma once 7 #pragma once
8 8
9 #include "base/base_api.h" 9 #include "base/base_api.h"
10 #include "base/debug/alias.h"
10 #include "base/memory/raw_scoped_refptr_mismatch_checker.h" 11 #include "base/memory/raw_scoped_refptr_mismatch_checker.h"
11 #include "base/memory/weak_ptr.h" 12 #include "base/memory/weak_ptr.h"
12 #include "base/tracked.h" 13 #include "base/tracked.h"
13 #include "base/tuple.h" 14 #include "base/tuple.h"
14 15
16 namespace base {
17 const size_t kDeadTask = 0xDEAD7A53;
18 }
19
15 // Task ------------------------------------------------------------------------ 20 // Task ------------------------------------------------------------------------
16 // 21 //
17 // A task is a generic runnable thingy, usually used for running code on a 22 // A task is a generic runnable thingy, usually used for running code on a
18 // different thread or for scheduling future tasks off of the message loop. 23 // different thread or for scheduling future tasks off of the message loop.
19 24
20 class BASE_API Task : public tracked_objects::Tracked { 25 class BASE_API Task : public tracked_objects::Tracked {
21 public: 26 public:
22 Task(); 27 Task();
23 virtual ~Task(); 28 virtual ~Task();
24 29
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 RunnableMethod(T* obj, Method meth, const Params& params) 323 RunnableMethod(T* obj, Method meth, const Params& params)
319 : obj_(obj), meth_(meth), params_(params) { 324 : obj_(obj), meth_(meth), params_(params) {
320 traits_.RetainCallee(obj_); 325 traits_.RetainCallee(obj_);
321 COMPILE_ASSERT( 326 COMPILE_ASSERT(
322 (base::internal::ParamsUseScopedRefptrCorrectly<Params>::value), 327 (base::internal::ParamsUseScopedRefptrCorrectly<Params>::value),
323 badrunnablemethodparams); 328 badrunnablemethodparams);
324 } 329 }
325 330
326 ~RunnableMethod() { 331 ~RunnableMethod() {
327 ReleaseCallee(); 332 ReleaseCallee();
333 obj_ = reinterpret_cast<T*>(base::kDeadTask);
328 } 334 }
329 335
330 virtual void Run() { 336 virtual void Run() {
331 if (obj_) 337 if (obj_)
332 DispatchToMethod(obj_, meth_, params_); 338 DispatchToMethod(obj_, meth_, params_);
333 } 339 }
334 340
335 virtual void Cancel() { 341 virtual void Cancel() {
336 ReleaseCallee(); 342 ReleaseCallee();
337 } 343 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 class RunnableFunction : public Task { 451 class RunnableFunction : public Task {
446 public: 452 public:
447 RunnableFunction(Function function, const Params& params) 453 RunnableFunction(Function function, const Params& params)
448 : function_(function), params_(params) { 454 : function_(function), params_(params) {
449 COMPILE_ASSERT( 455 COMPILE_ASSERT(
450 (base::internal::ParamsUseScopedRefptrCorrectly<Params>::value), 456 (base::internal::ParamsUseScopedRefptrCorrectly<Params>::value),
451 badrunnablefunctionparams); 457 badrunnablefunctionparams);
452 } 458 }
453 459
454 ~RunnableFunction() { 460 ~RunnableFunction() {
461 function_ = reinterpret_cast<Function>(base::kDeadTask);
455 } 462 }
456 463
457 virtual void Run() { 464 virtual void Run() {
465 // TODO(apatrick): Remove this ASAP. This ensures that the function pointer
466 // is available in minidumps for the purpose of diagnosing 81449.
darin (slow to review) 2011/05/24 04:45:19 nit: prefix bug numbers with "bug" or "crbug.com/"
467 Function function = function_;
468 base::debug::Alias(&function);
469 Params params = params_;
470 base::debug::Alias(&params);
471
458 if (function_) 472 if (function_)
459 DispatchToFunction(function_, params_); 473 DispatchToFunction(function_, params_);
460 } 474 }
461 475
462 private: 476 private:
463 Function function_; 477 Function function_;
464 Params params_; 478 Params params_;
465 }; 479 };
466 480
467 template <class Function> 481 template <class Function>
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 template <class Function, class A, class B, class C, class D, class E, 539 template <class Function, class A, class B, class C, class D, class E,
526 class F, class G, class H> 540 class F, class G, class H>
527 inline Task* NewRunnableFunction(Function function, const A& a, const B& b, 541 inline Task* NewRunnableFunction(Function function, const A& a, const B& b,
528 const C& c, const D& d, const E& e, const F& f, 542 const C& c, const D& d, const E& e, const F& f,
529 const G& g, const H& h) { 543 const G& g, const H& h) {
530 return new RunnableFunction<Function, Tuple8<A, B, C, D, E, F, G, H> >( 544 return new RunnableFunction<Function, Tuple8<A, B, C, D, E, F, G, H> >(
531 function, MakeTuple(a, b, c, d, e, f, g, h)); 545 function, MakeTuple(a, b, c, d, e, f, g, h));
532 } 546 }
533 547
534 #endif // BASE_TASK_H_ 548 #endif // BASE_TASK_H_
OLDNEW
« no previous file with comments | « base/debug/alias.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698