chromium之tracked

//------------------------------------------------------------------------------
// Tracked is the base class for all tracked objects.  During construction, it
// registers the fact that an instance was created, and at destruction time, it
// records that event.  The instance may be tagged with a name, which is refered
// to as its Location.  The Location is a file and line number, most
// typically indicated where the object was constructed.  In some cases, as the
// object's significance is refined (for example, a Task object is augmented to
// do additonal things), its Location may be redefined to that later location.

// Tracking includes (for each instance) recording the birth thread, death
// thread, and duration of life (from construction to destruction).  All this
// data is accumulated and filtered for review at about:objects.

信息跟踪收集,用于统计分析的工具


下面的代码是不是很熟悉,FROM_HERE

message_loop->PostTask(FROM_HERE,...)

#define FROM_HERE tracked_objects::Location(__FUNCTION__, __FILE__, __LINE__)

 

构造函数如下:

class Location {
 public:
  // Constructor should be called with a long-lived char*, such as __FILE__.
  // It assumes the provided value will persist as a global constant, and it
  // will not make a copy of it.
  Location(const char* function_name, const char* file_name, int line_number)
      : function_name_(function_name),
        file_name_(file_name),
        line_number_(line_number) { }
}

记录了函数名,文件名,行号

 

不过,只有在调试模式,才会有比较详细的统计信息

#ifndef NDEBUG
#ifndef TRACK_ALL_TASK_OBJECTS
#define TRACK_ALL_TASK_OBJECTS
#endif   // TRACK_ALL_TASK_OBJECTS
#endif  // NDEBUG

 

调试模式下,多了一个没见过的ThreadData,可以分析分析chromium之tracked_objects

Tracked::Tracked() : tracked_births_(NULL), tracked_birth_time_(Time::Now()) {
  if (!ThreadData::IsActive())
    return;
  SetBirthPlace(Location("NoFunctionName", "NeedToSetBirthPlace", -1));
}

 

posted on 2018-05-17 21:54  ckelsel  阅读(225)  评论(0编辑  收藏  举报

导航