MCPcopy Create free account
hub / github.com/VirtualGL/virtualgl / run

Method run

server/X11Trans.cpp:51–109  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49
50
51void X11Trans::run(void)
52{
53 Timer timer, sleepTimer; double err = 0.; bool first = true;
54
55 try
56 {
57 _vgl_disableFaker();
58
59 while(!deadYet)
60 {
61 FBXFrame *f; void *ftemp = NULL;
62
63 q.get(&ftemp); f = (FBXFrame *)ftemp; if(deadYet) return;
64 if(!f) THROW("Queue has been shut down");
65 ready.signal();
66 profBlit.startFrame();
67 f->redraw();
68 profBlit.endFrame(f->hdr.width * f->hdr.height, 0, 1);
69
70 profTotal.endFrame(f->hdr.width * f->hdr.height, 0, 1);
71 profTotal.startFrame();
72
73 if(fconfig.flushdelay > 0.)
74 {
75 long usec = (long)(fconfig.flushdelay * 1000000.);
76 if(usec > 0) usleep(usec);
77 }
78 if(fconfig.fps > 0.)
79 {
80 double elapsed = timer.elapsed();
81 if(first) first = false;
82 else
83 {
84 if(elapsed < 1. / fconfig.fps)
85 {
86 sleepTimer.start();
87 long usec = (long)((1. / fconfig.fps - elapsed - err) * 1000000.);
88 if(usec > 0) usleep(usec);
89 double sleepTime = sleepTimer.elapsed();
90 err = sleepTime - (1. / fconfig.fps - elapsed - err);
91 if(err < 0.) err = 0.;
92 }
93 }
94 timer.start();
95 }
96
97 f->signalComplete();
98 }
99
100 }
101 catch(std::exception &e)
102 {
103 if(thread) thread->setError(e);
104 ready.signal();
105 _vgl_enableFaker();
106 throw;
107 }
108 _vgl_enableFaker();

Callers

nothing calls this directly

Calls 11

signalMethod · 0.80
startFrameMethod · 0.80
endFrameMethod · 0.80
elapsedMethod · 0.80
signalCompleteMethod · 0.80
setErrorMethod · 0.80
_vgl_disableFakerFunction · 0.70
_vgl_enableFakerFunction · 0.70
getMethod · 0.45
redrawMethod · 0.45
startMethod · 0.45

Tested by

no test coverage detected