Skip to content

Commit 317b10a

Browse files
chore(profiling): remove where from echion
1 parent e994103 commit 317b10a

File tree

7 files changed

+0
-261
lines changed

7 files changed

+0
-261
lines changed

ddtrace/internal/datadog/profiling/stack_v2/echion/echion/config.h

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
#define PY_SSIZE_T_CLEAN
88
#include <Python.h>
99

10-
#include <string>
11-
1210
// Sampling interval
1311
inline unsigned int interval = 1000;
1412

@@ -22,15 +20,9 @@ inline bool ignore_non_running_threads = true;
2220
// Native stack sampling
2321
inline int native = 0;
2422

25-
// Where mode
26-
inline int where = 0;
27-
2823
// Maximum number of frames to unwind
2924
inline unsigned int max_frames = 2048;
3025

31-
// Pipe name (where mode IPC)
32-
inline std::string pipe_name;
33-
3426
// ----------------------------------------------------------------------------
3527
static PyObject* set_interval(PyObject* Py_UNUSED(m), PyObject* args)
3628
{
@@ -85,30 +77,6 @@ static PyObject* set_native(PyObject* Py_UNUSED(m), PyObject* Py_UNUSED(args))
8577
Py_RETURN_NONE;
8678
}
8779

88-
// ----------------------------------------------------------------------------
89-
static PyObject* set_where(PyObject* Py_UNUSED(m), PyObject* args)
90-
{
91-
int value;
92-
if (!PyArg_ParseTuple(args, "p", &value))
93-
return NULL;
94-
95-
where = value;
96-
97-
Py_RETURN_NONE;
98-
}
99-
100-
// ----------------------------------------------------------------------------
101-
static PyObject* set_pipe_name(PyObject* Py_UNUSED(m), PyObject* args)
102-
{
103-
const char* name;
104-
if (!PyArg_ParseTuple(args, "s", &name))
105-
return NULL;
106-
107-
pipe_name = name;
108-
109-
Py_RETURN_NONE;
110-
}
111-
11280
// ----------------------------------------------------------------------------
11381
static PyObject* set_max_frames(PyObject* Py_UNUSED(m), PyObject* args)
11482
{

ddtrace/internal/datadog/profiling/stack_v2/echion/echion/render.h

Lines changed: 0 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -63,80 +63,6 @@ class RendererInterface
6363
virtual ~RendererInterface() = default;
6464
};
6565

66-
class WhereRenderer : public RendererInterface
67-
{
68-
private:
69-
std::ostream* output;
70-
std::ofstream file_stream;
71-
72-
WhereRenderer() {}
73-
~WhereRenderer() {}
74-
75-
public:
76-
static WhereRenderer& get()
77-
{
78-
static WhereRenderer instance;
79-
return instance;
80-
}
81-
82-
WhereRenderer(WhereRenderer&) = delete;
83-
WhereRenderer(WhereRenderer&&) = delete;
84-
void operator=(const WhereRenderer&) = delete;
85-
86-
bool set_output(std::string_view file_name)
87-
{
88-
file_stream.close();
89-
file_stream.open(file_name.data(), std::ios::out);
90-
if (file_stream.is_open())
91-
{
92-
output = &file_stream;
93-
return true;
94-
}
95-
return false;
96-
}
97-
98-
bool set_output(std::ostream& new_output)
99-
{
100-
file_stream.close();
101-
output = &new_output;
102-
return true;
103-
}
104-
105-
[[nodiscard]] Result<void> open() override
106-
{
107-
return Result<void>::ok();
108-
};
109-
void close() override {};
110-
void header() override {};
111-
void metadata(const std::string&, const std::string&) override {};
112-
void frame(mojo_ref_t, mojo_ref_t, mojo_ref_t, mojo_int_t, mojo_int_t, mojo_int_t,
113-
mojo_int_t) override{};
114-
void frame_ref(mojo_ref_t) override{};
115-
void frame_kernel(const std::string&) override {};
116-
void string(mojo_ref_t, const std::string&) override {};
117-
void string_ref(mojo_ref_t) override{};
118-
119-
void render_thread_begin(PyThreadState*, std::string_view name, microsecond_t, uintptr_t,
120-
unsigned long) override
121-
{
122-
*output << " 🧵 " << name << ":" << std::endl;
123-
}
124-
void render_task_begin(std::string, bool) override {}
125-
void render_stack_begin(long long, long long, const std::string&) override {}
126-
void render_message(std::string_view msg) override
127-
{
128-
*output << msg << std::endl;
129-
}
130-
void render_frame(Frame&) override;
131-
void render_stack_end(MetricType, uint64_t) override {}
132-
void render_cpu_time(uint64_t) override {}
133-
134-
bool is_valid() override
135-
{
136-
return true;
137-
}
138-
};
139-
14066
class MojoRenderer : public RendererInterface
14167
{
14268
std::ofstream output;

ddtrace/internal/datadog/profiling/stack_v2/echion/echion/signals.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,9 @@ inline void sigprof_handler([[maybe_unused]] int signum)
2929
sigprof_handler_lock.unlock();
3030
}
3131

32-
// ----------------------------------------------------------------------------
33-
inline void sigquit_handler([[maybe_unused]] int signum)
34-
{
35-
// Wake up the where thread
36-
std::lock_guard<std::mutex> lock(where_lock);
37-
where_cv.notify_one();
38-
}
39-
4032
// ----------------------------------------------------------------------------
4133
inline void install_signals()
4234
{
43-
signal(SIGQUIT, sigquit_handler);
44-
4535
if (native)
4636
signal(SIGPROF, sigprof_handler);
4737
}

ddtrace/internal/datadog/profiling/stack_v2/echion/echion/stacks.h

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,6 @@ class FrameStack : public std::deque<Frame::Ref>
5858
}
5959
}
6060

61-
// ------------------------------------------------------------------------
62-
void render_where()
63-
{
64-
for (auto it = this->rbegin(); it != this->rend(); ++it)
65-
{
66-
#if PY_VERSION_HEX >= 0x030c0000
67-
if ((*it).get().is_entry)
68-
// This is a shim frame so we skip it.
69-
continue;
70-
#endif
71-
WhereRenderer::get().render_frame((*it).get());
72-
}
73-
}
74-
7561
private:
7662
// ------------------------------------------------------------------------
7763
static inline Frame::Key rotl(Key key)

ddtrace/internal/datadog/profiling/stack_v2/echion/echion/state.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
#define Py_BUILD_CORE
1919
#include <internal/pycore_pystate.h>
2020

21-
#include <condition_variable>
22-
#include <mutex>
2321
#include <thread>
2422

2523
inline _PyRuntimeState* runtime = &_PyRuntime;
@@ -29,10 +27,6 @@ inline std::thread* sampler_thread = nullptr;
2927

3028
inline int running = 0;
3129

32-
inline std::thread* where_thread = nullptr;
33-
inline std::condition_variable where_cv;
34-
inline std::mutex where_lock;
35-
3630
inline PyObject* asyncio_current_tasks = NULL;
3731
inline PyObject* asyncio_scheduled_tasks = NULL; // WeakSet
3832
inline PyObject* asyncio_eager_tasks = NULL; // set

ddtrace/internal/datadog/profiling/stack_v2/src/echion/coremodule.cc

Lines changed: 0 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -35,74 +35,6 @@
3535
#include <echion/threads.h>
3636
#include <echion/timing.h>
3737

38-
// ----------------------------------------------------------------------------
39-
static void do_where(std::ostream& stream)
40-
{
41-
WhereRenderer::get().set_output(stream);
42-
WhereRenderer::get().render_message("\r🐴 Echion reporting for duty");
43-
WhereRenderer::get().render_message("");
44-
45-
for_each_interp([](InterpreterInfo& interp) -> void {
46-
for_each_thread(interp, [](PyThreadState* tstate, ThreadInfo& thread) -> void {
47-
thread.unwind(tstate);
48-
WhereRenderer::get().render_thread_begin(tstate, thread.name, /*cpu_time*/ 0,
49-
tstate->thread_id, thread.native_id);
50-
51-
if (native)
52-
{
53-
auto interleave_success = interleave_stacks();
54-
if (!interleave_success)
55-
{
56-
std::cerr << "could not interleave stacks" << std::endl;
57-
return;
58-
}
59-
60-
interleaved_stack.render_where();
61-
}
62-
else
63-
python_stack.render_where();
64-
WhereRenderer::get().render_message("");
65-
});
66-
});
67-
}
68-
69-
// ----------------------------------------------------------------------------
70-
static void where_listener()
71-
{
72-
for (;;)
73-
{
74-
std::unique_lock<std::mutex> lock(where_lock);
75-
where_cv.wait(lock);
76-
77-
if (!running)
78-
break;
79-
80-
do_where(std::cerr);
81-
}
82-
}
83-
84-
// ----------------------------------------------------------------------------
85-
static void setup_where()
86-
{
87-
where_thread = new std::thread(where_listener);
88-
}
89-
90-
static void teardown_where()
91-
{
92-
if (where_thread != nullptr)
93-
{
94-
{
95-
std::lock_guard<std::mutex> lock(where_lock);
96-
97-
where_cv.notify_one();
98-
}
99-
100-
where_thread->join();
101-
102-
where_thread = nullptr;
103-
}
104-
}
105-
10638
// ----------------------------------------------------------------------------
10739
static inline void _start()
10840
{
@@ -122,23 +54,6 @@ static inline void _start()
12254
host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
12355
#endif
12456

125-
if (where)
126-
{
127-
std::ofstream pipe(pipe_name, std::ios::out);
128-
129-
if (pipe)
130-
do_where(pipe);
131-
132-
else
133-
std::cerr << "Failed to open pipe " << pipe_name << std::endl;
134-
135-
running = 0;
136-
137-
return;
138-
}
139-
140-
setup_where();
141-
14257
Renderer::get().header();
14358

14459
Renderer::get().metadata("mode", (cpu ? "cpu" : "wall"));
@@ -167,8 +82,6 @@ static inline void _stop()
16782
string_table.clear();
16883
}
16984

170-
teardown_where();
171-
17285
#if defined PL_DARWIN
17386
mach_port_deallocate(mach_task_self(), cclock);
17487
#endif
@@ -506,8 +419,6 @@ static PyMethodDef echion_core_methods[] = {
506419
{"set_interval", set_interval, METH_VARARGS, "Set the sampling interval"},
507420
{"set_cpu", set_cpu, METH_VARARGS, "Set whether to use CPU time instead of wall time"},
508421
{"set_native", set_native, METH_VARARGS, "Set whether to sample the native stacks"},
509-
{"set_where", set_where, METH_VARARGS, "Set whether to use where mode"},
510-
{"set_pipe_name", set_pipe_name, METH_VARARGS, "Set the pipe name"},
511422
{"set_max_frames", set_max_frames, METH_VARARGS, "Set the max number of frames to unwind"},
512423
// Sentinel
513424
{NULL, NULL, 0, NULL}};

ddtrace/internal/datadog/profiling/stack_v2/src/echion/render.cc

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,6 @@
11
#include <echion/frame.h>
22
#include <echion/render.h>
33

4-
// ------------------------------------------------------------------------
5-
void WhereRenderer::render_frame(Frame& frame)
6-
{
7-
auto maybe_name_str = string_table.lookup(frame.name);
8-
if (!maybe_name_str)
9-
{
10-
std::cerr << "could not get name for render_frame" << std::endl;
11-
return;
12-
}
13-
const auto& name_str = maybe_name_str->get();
14-
15-
16-
auto maybe_filename_str = string_table.lookup(frame.filename);
17-
if (!maybe_filename_str)
18-
{
19-
std::cerr << "could not get filename for render_frame" << std::endl;
20-
return;
21-
}
22-
const auto& filename_str = maybe_filename_str->get();
23-
24-
auto line = frame.location.line;
25-
26-
if (filename_str.rfind("native@", 0) == 0)
27-
{
28-
WhereRenderer::get().render_message(
29-
"\033[38;5;248;1m" + name_str + "\033[0m \033[38;5;246m(" + filename_str +
30-
"\033[0m:\033[38;5;246m" + std::to_string(line) + ")\033[0m");
31-
}
32-
else
33-
{
34-
WhereRenderer::get().render_message("\033[33;1m" + name_str + "\033[0m (\033[36m" +
35-
filename_str + "\033[0m:\033[32m" +
36-
std::to_string(line) + "\033[0m)");
37-
}
38-
}
39-
404
// ------------------------------------------------------------------------
415
void MojoRenderer::render_frame(Frame& frame)
426
{

0 commit comments

Comments
 (0)