1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #include <chrono> #include <iostream> #include <thread> #include <string> using namespace std; using namespace std::chrono; using namespace std::this_thread; typedef std::chrono::high_resolution_clock Clock; struct LogFPS { LogFPS(string name, Clock::time_point time) : _name(name), _time(time), _frameCount(0) {} void tick() { _frameCount++; Clock::time_point newTime = Clock::now(); milliseconds totalTicks = duration_cast<milliseconds>(newTime - _time); if (totalTicks.count() > 1000) { cout << _name << " calls per second : " << _frameCount << endl; _frameCount = 0; _time = newTime; } } string _name; int _frameCount; Clock::time_point _time; }; int main() { Clock::time_point mLastEndTime; milliseconds mDeltaTime(0); milliseconds frameTime(0); const milliseconds kMaxDeltatime((int)((1.0f / 60.0f)*1000.0f)); const milliseconds updateFrameCost(5); const milliseconds renderFrameCost(10); mLastEndTime = Clock::now(); LogFPS rFPS(string("RenderFrame"), mLastEndTime); LogFPS uFPS(string("UpdateFrame"), mLastEndTime); while(true) { Clock::time_point currentTime = Clock::now(); frameTime = duration_cast<milliseconds>(currentTime-mLastEndTime); mLastEndTime = currentTime; while (frameTime.count() > 0) { frameTime -= min(frameTime, kMaxDeltatime); sleep_for(updateFrameCost); // fake state processing uFPS.tick(); } sleep_for(renderFrameCost); // fake renderframe rFPS.tick(); } } |
I2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm87CnVzaW5nIG5hbWVzcGFjZSBzdGQ6OnRoaXNfdGhyZWFkOwoKdHlwZWRlZiBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrIENsb2NrOwpzdHJ1Y3QgTG9nRlBTCnsKICAgIExvZ0ZQUyhzdHJpbmcgbmFtZSwgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZSkgOiBfbmFtZShuYW1lKSwgX3RpbWUodGltZSksIF9mcmFtZUNvdW50KDApIHt9CiAgICB2b2lkIHRpY2soKQogICAgewogICAgICAgIF9mcmFtZUNvdW50Kys7CiAgICAgICAgQ2xvY2s6OnRpbWVfcG9pbnQgbmV3VGltZSA9IENsb2NrOjpub3coKTsKICAgICAgICBtaWxsaXNlY29uZHMgdG90YWxUaWNrcyA9IGR1cmF0aW9uX2Nhc3Q8bWlsbGlzZWNvbmRzPihuZXdUaW1lIC0gX3RpbWUpOwogICAgICAgIGlmICh0b3RhbFRpY2tzLmNvdW50KCkgPiAxMDAwKQogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCBfbmFtZSA8PCAiIGNhbGxzIHBlciBzZWNvbmQgOiAiIDw8IF9mcmFtZUNvdW50IDw8IGVuZGw7CiAgICAgICAgICAgIF9mcmFtZUNvdW50ID0gMDsKICAgICAgICAgICAgX3RpbWUgPSBuZXdUaW1lOwogICAgICAgIH0KCiAgICB9CiAgICBzdHJpbmcgX25hbWU7CiAgICBpbnQgX2ZyYW1lQ291bnQ7CiAgICBDbG9jazo6dGltZV9wb2ludCBfdGltZTsKfTsKCmludCBtYWluKCkKewogICAgQ2xvY2s6OnRpbWVfcG9pbnQgbUxhc3RFbmRUaW1lOwogICAgbWlsbGlzZWNvbmRzIG1EZWx0YVRpbWUoMCk7CiAgICBtaWxsaXNlY29uZHMgZnJhbWVUaW1lKDApOwoKICAgIGNvbnN0IG1pbGxpc2Vjb25kcyBrTWF4RGVsdGF0aW1lKChpbnQpKCgxLjBmIC8gNjAuMGYpKjEwMDAuMGYpKTsKICAgIGNvbnN0IG1pbGxpc2Vjb25kcyB1cGRhdGVGcmFtZUNvc3QoNSk7CiAgICBjb25zdCBtaWxsaXNlY29uZHMgcmVuZGVyRnJhbWVDb3N0KDEwKTsKICAgIAogICAgbUxhc3RFbmRUaW1lID0gQ2xvY2s6Om5vdygpOwoKICAgIExvZ0ZQUyByRlBTKHN0cmluZygiUmVuZGVyRnJhbWUiKSwgbUxhc3RFbmRUaW1lKTsKICAgIExvZ0ZQUyB1RlBTKHN0cmluZygiVXBkYXRlRnJhbWUiKSwgbUxhc3RFbmRUaW1lKTsKCiAgICB3aGlsZSh0cnVlKQogICAgewogICAgICAgIENsb2NrOjp0aW1lX3BvaW50IGN1cnJlbnRUaW1lID0gQ2xvY2s6Om5vdygpOwogICAgICAgIGZyYW1lVGltZSA9IGR1cmF0aW9uX2Nhc3Q8bWlsbGlzZWNvbmRzPihjdXJyZW50VGltZS1tTGFzdEVuZFRpbWUpOwogICAgICAgIG1MYXN0RW5kVGltZSA9IGN1cnJlbnRUaW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChmcmFtZVRpbWUuY291bnQoKSA+IDApCiAgICAgICAgewogICAgICAgICAgICBmcmFtZVRpbWUgLT0gbWluKGZyYW1lVGltZSwga01heERlbHRhdGltZSk7CiAgICAgICAgICAgIHNsZWVwX2Zvcih1cGRhdGVGcmFtZUNvc3QpOyAvLyBmYWtlIHN0YXRlIHByb2Nlc3NpbmcgICAgIAogICAgICAgICAgICB1RlBTLnRpY2soKTsKICAgICAgICB9CiAgICAgICAgc2xlZXBfZm9yKHJlbmRlckZyYW1lQ29zdCk7IC8vIGZha2UgcmVuZGVyZnJhbWUKICAgICAgICByRlBTLnRpY2soKTsKICAgIH0KfQo=
-
upload with new input
-
result: Time limit exceeded time: 5s memory: 2988 kB signal: 9 (SIGKILL)
UpdateFrame calls per second : 87 RenderFrame calls per second : 45 UpdateFrame calls per second : 87 RenderFrame calls per second : 44 UpdateFrame calls per second : 88 RenderFrame calls per second : 44 UpdateFrame calls per second : 88 RenderFrame calls per second : 44 UpdateFrame calls per second : 88 RenderFrame calls per second : 44 UpdateFrame calls per second : 88 RenderFrame calls per second : 44 UpdateFrame calls per second : 88 RenderFrame calls per second : 44 UpdateFrame calls per second : 88 RenderFrame calls per second : 44 UpdateFrame calls per second : 88 RenderFrame calls per second : 44 UpdateFrame calls per second : 88 RenderFrame calls per second : 44


