| Index: src/a64/instrument-a64.h
|
| diff --git a/src/typing.h b/src/a64/instrument-a64.h
|
| similarity index 50%
|
| copy from src/typing.h
|
| copy to src/a64/instrument-a64.h
|
| index d8708c2ccbe6f456ff76bdb53d7d530e4ced405e..08dc1b2ad17308ccb5cbd4ff8042ead090c06746 100644
|
| --- a/src/typing.h
|
| +++ b/src/a64/instrument-a64.h
|
| @@ -25,53 +25,84 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -#ifndef V8_TYPING_H_
|
| -#define V8_TYPING_H_
|
| +#ifndef V8_A64_INSTRUMENT_A64_H_
|
| +#define V8_A64_INSTRUMENT_A64_H_
|
|
|
| -#include "v8.h"
|
| -
|
| -#include "allocation.h"
|
| -#include "ast.h"
|
| -#include "compiler.h"
|
| -#include "type-info.h"
|
| -#include "zone.h"
|
| -#include "scopes.h"
|
| +#include "globals.h"
|
| +#include "utils.h"
|
| +#include "a64/decoder-a64.h"
|
| +#include "a64/constants-a64.h"
|
| +#include "a64/instrument-a64.h"
|
|
|
| namespace v8 {
|
| namespace internal {
|
|
|
| +const int kCounterNameMaxLength = 256;
|
| +const uint64_t kDefaultInstrumentationSamplingPeriod = 1 << 22;
|
|
|
| -class AstTyper: public AstVisitor {
|
| - public:
|
| - static void Type(CompilationInfo* info);
|
|
|
| - void* operator new(size_t size, Zone* zone) {
|
| - return zone->New(static_cast<int>(size));
|
| - }
|
| - void operator delete(void* pointer, Zone* zone) { }
|
| - void operator delete(void* pointer) { }
|
| +enum InstrumentState {
|
| + InstrumentStateDisable = 0,
|
| + InstrumentStateEnable = 1
|
| +};
|
|
|
| - DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
|
|
|
| - private:
|
| - explicit AstTyper(CompilationInfo* info);
|
| +enum CounterType {
|
| + Gauge = 0, // Gauge counters reset themselves after reading.
|
| + Cumulative = 1 // Cumulative counters keep their value after reading.
|
| +};
|
|
|
| - CompilationInfo* info_;
|
| - TypeFeedbackOracle oracle_;
|
|
|
| - TypeFeedbackOracle* oracle() { return &oracle_; }
|
| - Zone* zone() const { return info_->zone(); }
|
| +class Counter {
|
| + public:
|
| + Counter(const char* name, CounterType type = Gauge);
|
|
|
| - void VisitDeclarations(ZoneList<Declaration*>* declarations);
|
| - void VisitStatements(ZoneList<Statement*>* statements);
|
| + void Increment();
|
| + void Enable();
|
| + void Disable();
|
| + bool IsEnabled();
|
| + uint64_t count();
|
| + const char* name();
|
| + CounterType type();
|
|
|
| -#define DECLARE_VISIT(type) virtual void Visit##type(type* node);
|
| - AST_NODE_LIST(DECLARE_VISIT)
|
| -#undef DECLARE_VISIT
|
| + private:
|
| + char name_[kCounterNameMaxLength];
|
| + uint64_t count_;
|
| + bool enabled_;
|
| + CounterType type_;
|
| +};
|
| +
|
| +
|
| +class Instrument: public DecoderVisitor {
|
| + public:
|
| + explicit Instrument(const char* datafile = NULL,
|
| + uint64_t sample_period = kDefaultInstrumentationSamplingPeriod);
|
| + ~Instrument();
|
| +
|
| + // Declare all Visitor functions.
|
| + #define DECLARE(A) void Visit##A(Instruction* instr);
|
| + VISITOR_LIST(DECLARE)
|
| + #undef DECLARE
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(AstTyper);
|
| + private:
|
| + void Update();
|
| + void Enable();
|
| + void Disable();
|
| + void DumpCounters();
|
| + void DumpCounterNames();
|
| + void DumpEventMarker(unsigned marker);
|
| + void HandleInstrumentationEvent(unsigned event);
|
| + Counter* GetCounter(const char* name);
|
| +
|
| + void InstrumentLoadStore(Instruction* instr);
|
| + void InstrumentLoadStorePair(Instruction* instr);
|
| +
|
| + std::list<Counter*> counters_;
|
| +
|
| + FILE *output_stream_;
|
| + uint64_t sample_period_;
|
| };
|
|
|
| } } // namespace v8::internal
|
|
|
| -#endif // V8_TYPING_H_
|
| +#endif // V8_A64_INSTRUMENT_A64_H_
|
|
|