Home | History | Annotate | Download | only in src
      1 // Copyright 2014 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef V8_BASIC_BLOCK_PROFILER_H_
      6 #define V8_BASIC_BLOCK_PROFILER_H_
      7 
      8 #include <iosfwd>
      9 #include <list>
     10 #include <string>
     11 #include <vector>
     12 
     13 #include "src/base/macros.h"
     14 #include "src/globals.h"
     15 
     16 namespace v8 {
     17 namespace internal {
     18 
     19 class BasicBlockProfiler {
     20  public:
     21   class Data {
     22    public:
     23     size_t n_blocks() const { return n_blocks_; }
     24     const uint32_t* counts() const { return &counts_[0]; }
     25 
     26     void SetCode(std::ostringstream* os);
     27     void SetFunctionName(std::ostringstream* os);
     28     void SetSchedule(std::ostringstream* os);
     29     void SetBlockId(size_t offset, size_t block_id);
     30     uint32_t* GetCounterAddress(size_t offset);
     31 
     32    private:
     33     friend class BasicBlockProfiler;
     34     friend std::ostream& operator<<(std::ostream& os,
     35                                     const BasicBlockProfiler::Data& s);
     36 
     37     explicit Data(size_t n_blocks);
     38     ~Data();
     39 
     40     void ResetCounts();
     41 
     42     const size_t n_blocks_;
     43     std::vector<size_t> block_ids_;
     44     std::vector<uint32_t> counts_;
     45     std::string function_name_;
     46     std::string schedule_;
     47     std::string code_;
     48     DISALLOW_COPY_AND_ASSIGN(Data);
     49   };
     50 
     51   typedef std::list<Data*> DataList;
     52 
     53   BasicBlockProfiler();
     54   ~BasicBlockProfiler();
     55 
     56   Data* NewData(size_t n_blocks);
     57   void ResetCounts();
     58 
     59   const DataList* data_list() { return &data_list_; }
     60 
     61  private:
     62   friend V8_EXPORT_PRIVATE std::ostream& operator<<(
     63       std::ostream& os, const BasicBlockProfiler& s);
     64 
     65   DataList data_list_;
     66 
     67   DISALLOW_COPY_AND_ASSIGN(BasicBlockProfiler);
     68 };
     69 
     70 V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
     71                                            const BasicBlockProfiler& s);
     72 std::ostream& operator<<(std::ostream& os, const BasicBlockProfiler::Data& s);
     73 
     74 }  // namespace internal
     75 }  // namespace v8
     76 
     77 #endif  // V8_BASIC_BLOCK_PROFILER_H_
     78