diff --git a/src/apps/debuganalyzer/model/Model.cpp b/src/apps/debuganalyzer/model/Model.cpp index f185bffbe6..dd412d6706 100644 --- a/src/apps/debuganalyzer/model/Model.cpp +++ b/src/apps/debuganalyzer/model/Model.cpp @@ -259,10 +259,13 @@ Model::Thread::AddThreadWaitObject(WaitObject* waitObject, // #pragma mark - Model -Model::Model(void* eventData, size_t eventDataSize) +Model::Model(const char* dataSourceName, void* eventData, size_t eventDataSize) : + fDataSourceName(dataSourceName), fEventData(eventData), fEventDataSize(eventDataSize), + fBaseTime(0), + fLastEventTime(0), fTeams(20, true), fThreads(20, true), fWaitObjectGroups(20, true) @@ -276,6 +279,20 @@ Model::~Model() } +void +Model::SetBaseTime(bigtime_t time) +{ + fBaseTime = time; +} + + +void +Model::SetLastEventTime(bigtime_t time) +{ + fLastEventTime = time; +} + + int32 Model::CountTeams() const { diff --git a/src/apps/debuganalyzer/model/Model.h b/src/apps/debuganalyzer/model/Model.h index 125a7c2fc1..e54f62f291 100644 --- a/src/apps/debuganalyzer/model/Model.h +++ b/src/apps/debuganalyzer/model/Model.h @@ -5,9 +5,10 @@ #ifndef MODEL_H #define MODEL_H -#include #include +#include +#include #include #include @@ -26,9 +27,18 @@ public: class Thread; public: - Model(void* eventData, size_t eventDataSize); + Model(const char* dataSourceName, + void* eventData, size_t eventDataSize); ~Model(); + inline const char* DataSourceName() const; + + inline bigtime_t BaseTime() const; + void SetBaseTime(bigtime_t time); + + inline bigtime_t LastEventTime() const; + void SetLastEventTime(bigtime_t time); + int32 CountTeams() const; Team* TeamAt(int32 index) const; Team* TeamByID(team_id id) const; @@ -64,8 +74,11 @@ private: typedef BObjectList WaitObjectGroupList; private: + BString fDataSourceName; void* fEventData; size_t fEventDataSize; + bigtime_t fBaseTime; + bigtime_t fLastEventTime; TeamList fTeams; // sorted by ID ThreadList fThreads; // sorted by ID WaitObjectGroupList fWaitObjectGroups; @@ -295,6 +308,30 @@ private: }; +// #pragma mark - Model + + +const char* +Model::DataSourceName() const +{ + return fDataSourceName.String(); +} + + +bigtime_t +Model::BaseTime() const +{ + return fBaseTime; +} + + +bigtime_t +Model::LastEventTime() const +{ + return fLastEventTime; +} + + // #pragma mark - WaitObject diff --git a/src/apps/debuganalyzer/model_loader/ModelLoader.cpp b/src/apps/debuganalyzer/model_loader/ModelLoader.cpp index 8204598095..ba6a334cea 100644 --- a/src/apps/debuganalyzer/model_loader/ModelLoader.cpp +++ b/src/apps/debuganalyzer/model_loader/ModelLoader.cpp @@ -58,8 +58,10 @@ ModelLoader::ThreadInfo::ThreadInfo(Model::Thread* thread) inline void ModelLoader::_UpdateLastEventTime(bigtime_t time) { - if (fBaseTime < 0) + if (fBaseTime < 0) { fBaseTime = time; + fModel->SetBaseTime(time); + } fLastEventTime = time - fBaseTime; } @@ -168,7 +170,7 @@ ModelLoader::_Loader() } catch(...) { error = B_ERROR; } - + // clean up and notify the target AutoLocker locker(fLock); @@ -210,8 +212,13 @@ ModelLoader::_Load() if (error != B_OK) return error; + // get the data source name + BString dataSourceName; + fDataSource->GetName(dataSourceName); + // create a model - fModel = new(std::nothrow) Model(eventData, eventDataSize); + fModel = new(std::nothrow) Model(dataSourceName.String(), eventData, + eventDataSize); if (fModel == NULL) { free(eventData); return B_NO_MEMORY; @@ -247,7 +254,7 @@ ModelLoader::_Load() if (bufferSize < 0) return bufferSize; if (buffer == NULL) - return B_OK; + break; // process the event status_t error = _ProcessEvent(event, cpu, buffer, bufferSize); @@ -261,6 +268,10 @@ ModelLoader::_Load() return B_ERROR; } } + + fModel->SetLastEventTime(fLastEventTime); + + return B_OK; }