diff --git a/src/apex/profiler_listener.cpp b/src/apex/profiler_listener.cpp index e66bcdc6..45be767e 100644 --- a/src/apex/profiler_listener.cpp +++ b/src/apex/profiler_listener.cpp @@ -380,7 +380,7 @@ std::unordered_set free_profiles; << "'" << p->get_task_id()->get_name() << "'" << endl; int loc0 = task_scatterplot_samples.tellp(); if (loc0 > 32768) { - task_scatterplot_sample_file << task_scatterplot_samples.rdbuf(); + task_scatterplot_sample_file() << task_scatterplot_samples.rdbuf(); // reset the stringstream task_scatterplot_samples.str(""); } @@ -393,7 +393,7 @@ std::unordered_set free_profiles; << "'" << p->get_task_id()->get_name() << "'" << endl; int loc0 = task_scatterplot_samples.tellp(); if (loc0 > 32768) { - counter_scatterplot_sample_file << counter_scatterplot_samples.rdbuf(); + counter_scatterplot_sample_file() << counter_scatterplot_samples.rdbuf(); // reset the stringstream counter_scatterplot_samples.str(""); } @@ -1466,10 +1466,10 @@ if (rc != 0) cout << "PAPI error! " << name << ": " << PAPI_strerror(rc) << endl write_profile(); } if (apex_options::task_scatterplot()) { - task_scatterplot_sample_file << task_scatterplot_samples.rdbuf(); - task_scatterplot_sample_file.close(); - counter_scatterplot_sample_file << counter_scatterplot_samples.rdbuf(); - counter_scatterplot_sample_file.close(); + task_scatterplot_sample_file() << task_scatterplot_samples.rdbuf(); + task_scatterplot_sample_file().close(); + counter_scatterplot_sample_file() << counter_scatterplot_samples.rdbuf(); + counter_scatterplot_sample_file().close(); } if (data.reset) { reset_all(); diff --git a/src/apex/profiler_listener.hpp b/src/apex/profiler_listener.hpp index 9401fdfa..6fe063ce 100644 --- a/src/apex/profiler_listener.hpp +++ b/src/apex/profiler_listener.hpp @@ -144,8 +144,8 @@ class profiler_listener : public event_listener { std::thread * consumer_thread; #endif semaphore queue_signal; - std::ofstream task_scatterplot_sample_file; - std::ofstream counter_scatterplot_sample_file; + std::ofstream _task_scatterplot_sample_file; + std::ofstream _counter_scatterplot_sample_file; std::stringstream task_scatterplot_samples; std::stringstream counter_scatterplot_samples; public: @@ -164,27 +164,6 @@ class profiler_listener : public event_listener { num_papi_counters = 0; #endif if (apex_options::task_scatterplot()) { - std::stringstream ss; - ss << apex_options::output_file_path(); - ss << filesystem_separator(); - ss << task_scatterplot_sample_filename << node_id << ".csv"; - // open the file - task_scatterplot_sample_file.open(ss.str(), std::ofstream::out); - if (!task_scatterplot_sample_file.is_open()) { - perror("opening scatterplot sample file"); - } - APEX_ASSERT(task_scatterplot_sample_file.is_open()); - - ss.str(""); - ss << apex_options::output_file_path(); - ss << filesystem_separator(); - ss << counter_scatterplot_sample_filename << node_id << ".csv"; - // open the file - counter_scatterplot_sample_file.open(ss.str(), std::ofstream::out); - if (!counter_scatterplot_sample_file.is_open()) { - perror("opening scatterplot sample file"); - } - APEX_ASSERT(counter_scatterplot_sample_file.is_open()); profiler::get_global_start(); } }; @@ -210,6 +189,36 @@ class profiler_listener : public event_listener { void on_send(message_event_data &data); void on_recv(message_event_data &data); // other methods + std::ofstream& task_scatterplot_sample_file() { + if (!_task_scatterplot_sample_file.is_open()) { + std::stringstream ss; + ss << apex_options::output_file_path(); + ss << filesystem_separator(); + ss << task_scatterplot_sample_filename << node_id << ".csv"; + // open the file + _task_scatterplot_sample_file.open(ss.str(), std::ofstream::out); + if (!_task_scatterplot_sample_file.is_open()) { + perror("opening scatterplot sample file"); + } + APEX_ASSERT(_task_scatterplot_sample_file.is_open()); + } + return _task_scatterplot_sample_file; + } + std::ofstream& counter_scatterplot_sample_file () { + if (!_counter_scatterplot_sample_file.is_open()) { + std::stringstream ss; + ss << apex_options::output_file_path(); + ss << filesystem_separator(); + ss << counter_scatterplot_sample_filename << node_id << ".csv"; + // open the file + _counter_scatterplot_sample_file.open(ss.str(), std::ofstream::out); + if (!_counter_scatterplot_sample_file.is_open()) { + perror("opening scatterplot sample file"); + } + APEX_ASSERT(_counter_scatterplot_sample_file.is_open()); + } + return _counter_scatterplot_sample_file; + } void reset(task_identifier * id); void reset_all(void); profile * get_profile(const task_identifier &id);