1 #include "debugscript.h"
7 void DebugScript::ParseAction()
9 std::string actionType;
12 while (actionType[0] == '#')
15 std::getline(inp, tmp);
16 inp >> std::ws >> actionType;
18 if (actionType == "loop")
20 inp >> currentAction.loops >> actionType;
24 currentAction.loops = 1;
27 if (actionType == "wait")
29 currentAction.type = AT_WaitFrame;
32 else if (actionType == "translate")
36 currentAction.type = AT_Translate;
37 currentAction.x = RealFromStr(_x.c_str());
38 currentAction.y = RealFromStr(_y.c_str());
41 else if (actionType == "zoom")
43 std::string _x, _y, _z;
44 inp >> _x >> _y >> _z;
45 currentAction.type = AT_Zoom;
46 currentAction.x = RealFromStr(_x.c_str());
47 currentAction.y = RealFromStr(_y.c_str());
48 currentAction.z = RealFromStr(_z.c_str());
50 else if (actionType == "pxtranslate")
52 inp >> currentAction.ix >> currentAction.iy;
53 currentAction.type = AT_TranslatePx;
55 else if (actionType == "pxzoom")
57 inp >> currentAction.ix >> currentAction.iy >> currentAction.iz;
58 currentAction.type = AT_ZoomPx;
60 else if (actionType == "gpu")
62 currentAction.type = AT_SetGPURendering;
64 else if (actionType == "cpu")
66 currentAction.type = AT_SetCPURendering;
68 else if (actionType == "lazy")
70 currentAction.type = AT_EnableLazyRendering;
72 else if (actionType == "nolazy")
74 currentAction.type = AT_DisableLazyRendering;
76 else if (actionType == "quit")
78 currentAction.type = AT_Quit;
80 else if (actionType == "loadsvg")
82 currentAction.type = AT_LoadSVG;
83 inp >> currentAction.textargs;
85 else if (actionType == "label")
87 currentAction.type = AT_Label;
88 inp >> currentAction.textargs;
90 else if (actionType == "goto")
92 currentAction.type = AT_Goto;
93 inp >> currentAction.textargs;
95 else if (actionType == "debug")
97 currentAction.type = AT_Debug;
98 getline(inp,currentAction.textargs);
100 else if (actionType == "clear")
102 currentAction.type = AT_ClearDocument;
104 else if (actionType == "clearperf")
106 currentAction.type = AT_ClearPerformance;
108 else if (actionType == "printperf")
110 currentAction.type = AT_PrintPerformance;
112 else if (actionType == "recordperf")
114 currentAction.type = AT_RecordPerformance;
118 bool DebugScript::Execute(View *view, Screen *scr)
120 if (currentAction.loops <= 0)
122 if (m_index >= m_actions.size())
125 if (m_labels.size() > 0)
127 m_actions.push_back(currentAction);
133 currentAction = m_actions[m_index++];
136 switch(currentAction.type)
143 view->Translate(currentAction.x, currentAction.y);
146 view->Translate(Real(currentAction.ix)/Real(scr->ViewportWidth()), Real(currentAction.iy)/Real(scr->ViewportHeight()));
149 view->ScaleAroundPoint(currentAction.x, currentAction.y, currentAction.z);
152 view->ScaleAroundPoint(Real(currentAction.ix)/Real(scr->ViewportWidth()),Real(currentAction.iy)/Real(scr->ViewportHeight()), Real(expf(-currentAction.iz/20.f)));
154 case AT_SetGPURendering:
155 view->SetGPURendering(true);
157 case AT_SetCPURendering:
158 view->SetGPURendering(false);
160 case AT_EnableLazyRendering:
161 view->SetLazyRendering(true);
163 case AT_DisableLazyRendering:
164 view->SetLazyRendering(false);
168 #ifdef TRANSFORM_OBJECTS_NOT_VIEW
169 view->Doc().LoadSVG(currentAction.textargs, Rect(Real(1)/Real(2),Real(1)/Real(2),Real(1)/Real(800),Real(1)/Real(600)));
171 const Rect & bounds = view->GetBounds();
172 view->Doc().LoadSVG(currentAction.textargs, Rect(bounds.x+bounds.w/Real(2),bounds.y+bounds.h/Real(2),bounds.w/Real(800),bounds.h/Real(600)));
174 currentAction.type = AT_WaitFrame;
175 view->ForceRenderDirty();
176 view->ForceBufferDirty();
177 view->ForceBoundsDirty();
178 currentAction.loops = 1;
182 m_labels[currentAction.textargs] = m_index;
183 currentAction.type = AT_WaitFrame;
184 currentAction.loops = 1;
187 m_index = m_labels[currentAction.textargs];
188 currentAction.loops = 1;
191 Debug("View bounds: %s", view->GetBounds().Str().c_str());
192 if (currentAction.textargs.size() > 0)
193 Debug("%s", currentAction.textargs.c_str());
195 case AT_ClearDocument:
196 view->Doc().ClearObjects();
197 currentAction.loops = 1;
199 case AT_ClearPerformance:
200 ClearPerformance(view, scr);
201 currentAction.loops = 1;
203 case AT_PrintPerformance:
204 PrintPerformance(view, scr);
205 currentAction.loops = 1;
207 case AT_RecordPerformance:
208 PrintPerformance(view, scr);
211 Fatal("Unknown script command in queue.");
213 currentAction.loops--;
217 void DebugScript::ClearPerformance(View * view, Screen * scr)
219 m_perf_start.clock = clock();
220 m_perf_start.object_count = view->Doc().ObjectCount();
221 m_perf_start.view_bounds = view->GetBounds();
222 m_perf_last = m_perf_start;
225 void DebugScript::PrintPerformance(View * view, Screen * scr)
227 DebugScript::PerformanceData now;
229 now.object_count = view->Doc().ObjectCount();
230 now.view_bounds = view->GetBounds();
231 // object_count delta clock delta x deltax y deltay w deltaw h deltah
232 printf("%d\t%d\t%lu\t%lu\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\n",
233 now.object_count, now.object_count - m_perf_last.object_count,
234 (uint64_t)now.clock, (uint64_t)(now.clock - m_perf_last.clock),
235 Double(now.view_bounds.x), Double(now.view_bounds.x - m_perf_last.view_bounds.x),
236 Double(now.view_bounds.y), Double(now.view_bounds.y - m_perf_last.view_bounds.y),
237 Double(now.view_bounds.w), Double(now.view_bounds.w - m_perf_last.view_bounds.w),
238 Double(now.view_bounds.h), Double(now.view_bounds.h - m_perf_last.view_bounds.h));