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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user