Added checkboxen for toggling the displayed data.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30669 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2009-05-08 02:13:48 +00:00
parent ba8490bedf
commit 639e61ad42
3 changed files with 138 additions and 36 deletions
+6 -1
View File
@@ -11,7 +11,12 @@ enum {
MSG_MODEL_LOADED_FAILED = 'mlfl', MSG_MODEL_LOADED_FAILED = 'mlfl',
MSG_MODEL_LOADED_ABORTED = 'mlab', MSG_MODEL_LOADED_ABORTED = 'mlab',
MSG_WINDOW_QUIT = 'wiqt' MSG_WINDOW_QUIT = 'wiqt',
MSG_CHECK_BOX_RUN_TIME = 'chkr',
MSG_CHECK_BOX_WAIT_TIME = 'chkw',
MSG_CHECK_BOX_PREEMPTION_TIME = 'chkp',
MSG_CHECK_BOX_LATENCY_TIME = 'chkl'
}; };
@@ -7,11 +7,15 @@
#include <new> #include <new>
#include <GridLayoutBuilder.h>
#include <GroupLayoutBuilder.h> #include <GroupLayoutBuilder.h>
#include <Message.h>
#include <ScrollView.h> #include <ScrollView.h>
#include <AutoDeleter.h> #include <AutoDeleter.h>
#include "ColorCheckBox.h"
#include "MessageCodes.h"
#include "ThreadModel.h" #include "ThreadModel.h"
#include "chart/BigtimeChartAxisLegendSource.h" #include "chart/BigtimeChartAxisLegendSource.h"
@@ -32,6 +36,11 @@ enum {
TIME_TYPE_COUNT = 5 TIME_TYPE_COUNT = 5
}; };
static const rgb_color kRunTimeColor = {0, 0, 0, 255};
static const rgb_color kWaitTimeColor = {0, 255, 0, 255};
static const rgb_color kPreemptionTimeColor = {0, 0, 255, 255};
static const rgb_color kLatencyTimeColor = {255, 0, 0, 255};
class ThreadWindow::ActivityPage::ThreadActivityData class ThreadWindow::ActivityPage::ThreadActivityData
: public ChartDataSource { : public ChartDataSource {
@@ -303,8 +312,8 @@ ThreadWindow::ActivityPage::ActivityPage()
fActivityChartRenderer(NULL), fActivityChartRenderer(NULL),
fRunTimeData(NULL), fRunTimeData(NULL),
fWaitTimeData(NULL), fWaitTimeData(NULL),
fLatencyTimeData(NULL), fPreemptionTimeData(NULL),
fPreemptionTimeData(NULL) fLatencyTimeData(NULL)
{ {
SetName("Activity"); SetName("Activity");
@@ -320,10 +329,29 @@ ThreadWindow::ActivityPage::ActivityPage()
BGroupLayoutBuilder(this) BGroupLayoutBuilder(this)
.Add(new BScrollView("activity scroll", fActivityChart, 0, true, false)) .Add(new BScrollView("activity scroll", fActivityChart, 0, true, false))
.AddStrut(20) .AddStrut(20)
.Add(BGridLayoutBuilder()
.Add(fRunTimeCheckBox = new ColorCheckBox("Run Time", kRunTimeColor,
new BMessage(MSG_CHECK_BOX_RUN_TIME)),
0, 0)
.Add(fWaitTimeCheckBox = new ColorCheckBox("Wait Time",
kWaitTimeColor, new BMessage(MSG_CHECK_BOX_WAIT_TIME)),
1, 0)
.Add(fPreemptionTimeCheckBox = new ColorCheckBox("Latency Time",
kPreemptionTimeColor,
new BMessage(MSG_CHECK_BOX_PREEMPTION_TIME)),
0, 1)
.Add(fLatencyTimeCheckBox = new ColorCheckBox("Preemption Time",
kLatencyTimeColor,
new BMessage(MSG_CHECK_BOX_LATENCY_TIME)),
1, 1)
)
; ;
rendererDeleter.Detach(); rendererDeleter.Detach();
// enable the run time chart data
fRunTimeCheckBox->CheckBox()->SetValue(B_CONTROL_ON);
// TODO: Allocation management... // TODO: Allocation management...
LegendChartAxis* axis = new LegendChartAxis( LegendChartAxis* axis = new LegendChartAxis(
new BigtimeChartAxisLegendSource, new StringChartLegendRenderer); new BigtimeChartAxisLegendSource, new StringChartLegendRenderer);
@@ -374,36 +402,95 @@ ThreadWindow::ActivityPage::SetModel(ThreadModel* model)
fThreadModel = model; fThreadModel = model;
if (fThreadModel != NULL) { if (fThreadModel != NULL) {
// run time _UpdateChartDataEnabled(RUN_TIME);
LineChartRendererDataSourceConfig runConfig( _UpdateChartDataEnabled(WAIT_TIME);
rgb_color().set_to(0, 0, 0, 255)); _UpdateChartDataEnabled(PREEMPTION_TIME);
_UpdateChartDataEnabled(LATENCY_TIME);
fRunTimeData = new(std::nothrow) ThreadActivityData(fThreadModel, }
RUN_TIME); }
fActivityChart->AddDataSource(fRunTimeData, &runConfig);
// wait time void
LineChartRendererDataSourceConfig waitConfig( ThreadWindow::ActivityPage::MessageReceived(BMessage* message)
rgb_color().set_to(0, 255, 0, 255)); {
switch (message->what) {
fWaitTimeData = new(std::nothrow) ThreadActivityData(fThreadModel, case MSG_CHECK_BOX_RUN_TIME:
WAIT_TIME); _UpdateChartDataEnabled(RUN_TIME);
fActivityChart->AddDataSource(fWaitTimeData, &waitConfig); break;
case MSG_CHECK_BOX_WAIT_TIME:
// preemption time _UpdateChartDataEnabled(WAIT_TIME);
LineChartRendererDataSourceConfig preemptionConfig( break;
rgb_color().set_to(0, 0, 255, 255)); case MSG_CHECK_BOX_PREEMPTION_TIME:
_UpdateChartDataEnabled(PREEMPTION_TIME);
fLatencyTimeData = new(std::nothrow) ThreadActivityData(fThreadModel, break;
PREEMPTION_TIME); case MSG_CHECK_BOX_LATENCY_TIME:
fActivityChart->AddDataSource(fLatencyTimeData, &preemptionConfig); _UpdateChartDataEnabled(LATENCY_TIME);
break;
// latency time default:
LineChartRendererDataSourceConfig latencyConfig( BGroupView::MessageReceived(message);
rgb_color().set_to(255, 0, 0, 255)); break;
}
fPreemptionTimeData = new(std::nothrow) ThreadActivityData(fThreadModel, }
LATENCY_TIME);
fActivityChart->AddDataSource(fPreemptionTimeData, &latencyConfig);
void
ThreadWindow::ActivityPage::AttachedToWindow()
{
fRunTimeCheckBox->SetTarget(this);
fWaitTimeCheckBox->SetTarget(this);
fPreemptionTimeCheckBox->SetTarget(this);
fLatencyTimeCheckBox->SetTarget(this);
}
void
ThreadWindow::ActivityPage::_UpdateChartDataEnabled(int timeType)
{
ThreadActivityData** data;
ColorCheckBox* checkBox;
rgb_color color;
switch (timeType) {
case RUN_TIME:
data = &fRunTimeData;
checkBox = fRunTimeCheckBox;
color = kRunTimeColor;
break;
case WAIT_TIME:
data = &fWaitTimeData;
checkBox = fWaitTimeCheckBox;
color = kWaitTimeColor;
break;
case PREEMPTION_TIME:
data = &fPreemptionTimeData;
checkBox = fPreemptionTimeCheckBox;
color = kPreemptionTimeColor;
break;
case LATENCY_TIME:
data = &fLatencyTimeData;
checkBox = fLatencyTimeCheckBox;
color = kLatencyTimeColor;
break;
default:
return;
}
bool enabled = checkBox->CheckBox()->Value() == B_CONTROL_ON;
if ((*data != NULL) == enabled)
return;
if (enabled) {
LineChartRendererDataSourceConfig config(color);
*data = new(std::nothrow) ThreadActivityData(fThreadModel, timeType);
if (*data == NULL)
return;
fActivityChart->AddDataSource(*data, &config);
} else {
fActivityChart->RemoveDataSource(*data);
delete *data;
*data = NULL;
} }
} }
@@ -12,6 +12,7 @@
class Chart; class Chart;
class ChartRenderer; class ChartRenderer;
class ColorCheckBox;
class ThreadWindow::ActivityPage : public BGroupView { class ThreadWindow::ActivityPage : public BGroupView {
@@ -21,19 +22,28 @@ public:
void SetModel(ThreadModel* model); void SetModel(ThreadModel* model);
virtual void MessageReceived(BMessage* message);
virtual void AttachedToWindow();
private: private:
class ThreadActivityData; class ThreadActivityData;
private:
void _UpdateChartDataEnabled(int timeType);
private: private:
ThreadModel* fThreadModel; ThreadModel* fThreadModel;
Chart* fActivityChart; Chart* fActivityChart;
ChartRenderer* fActivityChartRenderer; ChartRenderer* fActivityChartRenderer;
ThreadActivityData* fRunTimeData; ThreadActivityData* fRunTimeData;
ThreadActivityData* fWaitTimeData; ThreadActivityData* fWaitTimeData;
ThreadActivityData* fLatencyTimeData;
ThreadActivityData* fPreemptionTimeData; ThreadActivityData* fPreemptionTimeData;
ThreadActivityData* fLatencyTimeData;
ColorCheckBox* fRunTimeCheckBox;
ColorCheckBox* fWaitTimeCheckBox;
ColorCheckBox* fPreemptionTimeCheckBox;
ColorCheckBox* fLatencyTimeCheckBox;
}; };
#endif // THREAD_ACTIVITY_PAGE_H #endif // THREAD_ACTIVITY_PAGE_H