1// Copyright 2019 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_EXTENSIONS_CPUTRACEMARK_EXTENSION_H_
6#define V8_EXTENSIONS_CPUTRACEMARK_EXTENSION_H_
7
8#include "include/v8-extension.h"
9#include "src/base/strings.h"
10
11namespace v8 {
12
13template <typename T>
14class FunctionCallbackInfo;
15
16namespace internal {
17
18class CpuTraceMarkExtension : public v8::Extension {
19 public:
20  explicit CpuTraceMarkExtension(const char* fun_name)
21      : v8::Extension("v8/cpumark",
22                      BuildSource(buffer_, sizeof(buffer_), fun_name)) {}
23
24  v8::Local<v8::FunctionTemplate> GetNativeFunctionTemplate(
25      v8::Isolate* isolate, v8::Local<v8::String> name) override;
26
27 private:
28  static void Mark(const v8::FunctionCallbackInfo<v8::Value>& args);
29
30  static const char* BuildSource(char* buf, size_t size, const char* fun_name) {
31    base::SNPrintF(base::Vector<char>(buf, static_cast<int>(size)),
32                   "native function %s();", fun_name);
33    return buf;
34  }
35
36  char buffer_[50];
37};
38
39}  // namespace internal
40}  // namespace v8
41
42#endif  // V8_EXTENSIONS_CPUTRACEMARK_EXTENSION_H_
43