00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00028
00030
00031 #define YASAGUI_TIMINGS_INCLUDE
00032
00033
00035 #include <yasagui/yasagui.h>
00036 #include "datatypes.h"
00037 #include "timingsettings.h"
00038 #include "timingparser.h"
00039 #include "environment.h"
00040 #include "project.h"
00041
00043 class YPainter;
00044 class YLogAction;
00045
00046
00050 class YTimings
00051 { int width;
00052 int height;
00053 int namewidth;
00054 int nameheight;
00055 int timingheight;
00056 int timingsheight;
00057 int entries;
00058 YASA_TIME maxduration;
00059 QString title;
00060 QString ordertitle;
00061 QStringList entrynames;
00062 QFontMetrics *fontmetrics;
00063 YTimingParser *timingparser;
00064 int titlewidth;
00065
00066 int GetEntries() const { return entries; }
00067 int CalculateHeight();
00068 int CalculateWidth(int zoomfactor);
00069 const QFontMetrics* GetFontMetrics() const { return fontmetrics; }
00070 const QString & GetTitle() const { return title; }
00071 const QString & GetOrderTitle() const { return ordertitle; }
00072 const QStringList & GetRowNames() const { return entrynames; }
00073 int GetTitleHeight() const
00074 {
00075 return YTIMING_SPACING_Y + fontmetrics->height() + YTIMING_SPACING_Y+2;
00076 }
00077 int GetTimingsHeight() const { return timingsheight; }
00078 int GetTitleWidth() const { return titlewidth; }
00079 public: YTimings() :
00080 width(0),
00081 height(0),
00082 namewidth(0),
00083 nameheight(0),
00084 timingheight(0),
00085 timingsheight(0),
00086 entries(0),
00087 maxduration(0),
00088 fontmetrics(0),
00089 timingparser(0),
00090 titlewidth(0)
00091 { }
00092 virtual ~YTimings()
00093 {
00094 if (fontmetrics)
00095 delete fontmetrics;
00096 }
00097 virtual int InitInstance(const QFont &font, YPainter *painter)
00098 { maxduration=CalculateMaxDuration();
00099 entries=GetMaxEntries();
00100 title=GetTimingTitle();
00101 ordertitle=GetOrderName();
00102 entrynames=CreateRowNames();
00103 fontmetrics=new QFontMetrics(font);
00104 timingparser=CreateTimingParser();
00105 if ( fontmetrics && timingparser )
00106 {
00107 timingparser->SetPainter(painter);
00108 timingparser->SetTimings(this);
00109 titlewidth=fontmetrics->width( GetTitle() );
00110 CalculateHeight();
00111 CalculateWidth(YTIMING_DEFAULT_ZOOMFACTOR);
00112 return 0;
00113 }
00114 else
00115 return YASAE_OUT_OF_MEMORY;
00116 }
00117 virtual void UpdateInstance(int zoomfactorx)
00118 { if ( fontmetrics->height() > YTIMING_TIMING_HEIGHT )
00119 timingheight=fontmetrics->height() + YTIMING_SPACING_Y;
00120 else
00121 timingheight=YTIMING_TIMING_HEIGHT + YTIMING_SPACING_Y;
00122 timingsheight=timingheight * GetEntries();
00123 CalculateHeight( );
00124 CalculateWidth( zoomfactorx );
00125 }
00126 int GetTimingHeight() const { return timingheight; }
00127 int GetHeight() const { return height; }
00128 int GetWidth() const { return width; }
00129 int GetNameHeight() const { return nameheight; }
00130 int GetNameWidth() const { return namewidth; }
00131 virtual void DrawTimingContents(YPainter& p) const;
00132 virtual void DrawNameContents(YPainter& p) const;
00133 YASA_TIME GetMaxDuration() const { return maxduration; }
00136 virtual int GetLogActionRow(const YLogAction *) const { return 0; }
00138 virtual bool FilterLoggingAction(const YLogAction *) const { return true; }
00139 protected:
00141 virtual unsigned int GetMaxEntries() const=0;
00143 virtual QStringList CreateRowNames() const=0;
00146 virtual QString GetOrderName() const=0;
00147 virtual QString GetTimingTitle() const=0;
00148 virtual YASA_TIME CalculateMaxDuration() const=0;
00149 virtual YTimingParser * CreateTimingParser() const=0;
00151 int ConvertTimeToPosition(YPainter &p, YASA_TIME time) const { return time / p.GetZoomFactor();}
00152 YTimingParser * GetTimingParser() const { return timingparser; }
00153 virtual void EvaluateTimings() const =0;
00155 virtual QString GetDurationString(const YLogAction *) const { return QString::null; }
00156 };
00157
00158
00161 class YEnvironmentTimings : public YTimings
00162 { protected:
00163 YEnvironmentLogFileSet &environmentlogfile;
00164 public: YEnvironmentTimings(YEnvironmentLogFileSet &e) : environmentlogfile(e) { }
00165 virtual QString GetTimingTitle() const
00166 {
00167 YEnvironment *environment=(YEnvironment*) environmentlogfile.GetParent();
00168 return QString( MSGP_TI_TITLE_ENVIRONMENT )
00169 .arg( MSGP_TI_SUBTITLE_PROJECT )
00170 .arg( environment->GetProject()->GetName() )
00171 .arg( environment->GetName() )
00172 .arg( GetOrderName() );
00173 }
00174 virtual void EvaluateTimings() const { environmentlogfile.EvaluateLoggingActions( *GetTimingParser() ); }
00175 virtual YASA_TIME CalculateMaxDuration() const { return environmentlogfile.GetMaxDuration(); }
00178 virtual QString GetDurationString(const YLogAction *action) const
00179 {
00180 if ( environmentlogfile.GetTaskSet().GetCount() )
00181 {
00182 YLogFileTask *thread=action->GetThread();
00183 if ( thread )
00184 return thread->GetName();
00185 }
00186 return QString::null;
00187 }
00188 };
00189
00190
00198 class YTaskEnvironmentTimings : public YEnvironmentTimings
00199 {public: YTaskEnvironmentTimings(YEnvironmentLogFileSet &e) : YEnvironmentTimings(e) { }
00200 virtual QStringList CreateRowNames() const
00201 { QStringList list;
00202 for ( unsigned int i=0; i<GetMaxEntries() ; i++ )
00203 list.append( environmentlogfile.GetTaskSet().At(i)->GetName() );
00204 return list;
00205 }
00206 virtual unsigned int GetMaxEntries() const { return environmentlogfile.GetTaskSet().GetCount(); }
00207 virtual QString GetOrderName() const { return MSGP_TI_SUBTITLE_TASK; }
00208 virtual YTimingParser * CreateTimingParser() const { return new YTaskEnvironmentTimingParser(); }
00210 virtual QString GetDurationString(const YLogAction *) const
00211 {
00212 if ( environmentlogfile.GetCount() )
00213 return QString::number( GetTimingParser()->GetCPULogFile()->GetCPU() );
00214 return QString::null;
00215 }
00216 };
00217
00218
00226 class YMutexEnvironmentTimings : public YEnvironmentTimings
00227 {public: YMutexEnvironmentTimings(YEnvironmentLogFileSet &e) : YEnvironmentTimings(e) { }
00228 virtual QStringList CreateRowNames() const
00229 { QStringList list;
00230 for ( unsigned int i=0; i<GetMaxEntries(); i++ )
00231 list.append( environmentlogfile.GetMutexSet().At(i)->GetName() );
00232 return list;
00233 }
00234 virtual unsigned int GetMaxEntries() const { return environmentlogfile.GetMutexSet().GetCount(); }
00235 virtual QString GetOrderName() const { return MSGP_TI_SUBTITLE_MUTEX; }
00236 virtual YTimingParser * CreateTimingParser() const { return new YMutexEnvironmentTimingParser(); }
00237 };
00238
00239
00247 class YCPUEnvironmentTimings : public YEnvironmentTimings
00248 {public: YCPUEnvironmentTimings(YEnvironmentLogFileSet &e) : YEnvironmentTimings(e) { }
00249 virtual QStringList CreateRowNames() const
00250 { QStringList list;
00251 for ( unsigned int i=0; i<GetMaxEntries(); i++ )
00252 list.append( environmentlogfile.At(i)->GetName() );
00253 return list;
00254 }
00255 virtual unsigned int GetMaxEntries() const { return environmentlogfile.GetCount(); }
00256 virtual QString GetOrderName() const { return MSGP_TI_SUBTITLE_CPU; }
00257 virtual YTimingParser * CreateTimingParser() const { return new YCPUEnvironmentTimingParser(); }
00258 };
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00280 class YProjectTimings : public YTimings
00281 { protected:
00282 YProjectLogFile& projectlogfile;
00283 public: YProjectTimings(YProjectLogFile &lfs) : projectlogfile(lfs) { }
00284 virtual void EvaluateTimings() const { projectlogfile.EvaluateLoggingActions( *GetTimingParser() );}
00285 virtual QString GetTimingTypeName() const=0;
00286 virtual YASA_TIME CalculateMaxDuration() const { return projectlogfile.GetMaxDuration(); }
00287 virtual QStringList CreateRowNames() const { return projectlogfile.GetEnvironmentNames();}
00288 virtual QString GetOrderName() const { return MSGP_TI_SUBTITLE_ENVIRONMENT; }
00289 virtual unsigned int GetMaxEntries() const { return projectlogfile.GetMaxEntries(); }
00290 virtual int GetLogActionRow(const YLogAction *) const { return GetTimingParser()->GetEnvironmentLogFileNumber(); }
00291 };
00292
00293
00302 class YTaskProjectTimings : public YProjectTimings
00303 { int taskid;
00304 QString taskname;
00305 public: YTaskProjectTimings(const QString &tname, int id, YProjectLogFile &p) :
00306 YProjectTimings(p), taskid(id), taskname(tname) { }
00307 virtual YTimingParser * CreateTimingParser() const { return new YTaskProjectTimingParser(); }
00308 virtual QString GetTimingTypeName() const { return MSGP_TI_SUBTITLE_TASK; }
00309 int GetTaskID() const { return taskid; }
00310 virtual bool FilterLoggingAction(const YLogAction *action) const
00311 { return taskid == action->GetThread()->GetId(); }
00312 virtual QString GetTimingTitle() const
00313 { return QString(MSGP_TI_TITLE_PROJECT)
00314 .arg( GetTimingTypeName() )
00315 .arg( taskname )
00316 .arg( GetOrderName() );
00317 }
00318 };
00319
00320
00329 class YMutexProjectTimings : public YProjectTimings
00330 { int mutexid;
00331 QString mutexname;
00332 public: YMutexProjectTimings(const QString &mname, int id, YProjectLogFile &p) : YProjectTimings(p),
00333 mutexid(id), mutexname(mname) { }
00334 virtual YTimingParser * CreateTimingParser() const { return new YMutexProjectTimingParser(); }
00335 virtual QString GetTimingTypeName() const { return MSGP_TI_SUBTITLE_MUTEX; }
00336 int GetMutexID() const { return mutexid; }
00337 virtual bool FilterLoggingAction(const YLogAction *action) const
00338 { return action->GetMutex() && action->GetMutex()->GetId()==mutexid; }
00339 virtual QString GetTimingTitle() const
00340 { return QString(MSGP_TI_TITLE_PROJECT)
00341 .arg( GetTimingTypeName() )
00342 .arg( mutexname )
00343 .arg( GetOrderName() );
00344 }
00345 };
00346
00347
00356 class YCPUProjectTimings : public YProjectTimings
00357 { unsigned int cpu;
00358 public: YCPUProjectTimings(unsigned int c, YProjectLogFile &p) : YProjectTimings(p), cpu (c) { }
00359 virtual YTimingParser * CreateTimingParser() const { return new YCPUProjectTimingParser(); }
00360 virtual QString GetTimingTypeName() const { return MSGP_TI_SUBTITLE_CPU; }
00361 unsigned int GetCPU() const { return cpu; }
00362
00363
00364 virtual QString GetTimingTitle() const
00365 { return QString(MSGP_TI_TITLE_PROJECT)
00366 .arg( GetTimingTypeName() )
00367 .arg( cpu )
00368 .arg( GetOrderName() );
00369 }
00370 };
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00388 #endif // ifndef YASAGUI_TIMINGS_INCLUDE