{"id":1,"date":"2024-11-16T13:09:52","date_gmt":"2024-11-16T00:09:52","guid":{"rendered":"https:\/\/systemreset.io\/journal\/?p=1"},"modified":"2024-11-23T13:47:05","modified_gmt":"2024-11-23T00:47:05","slug":"fps-and-battery-life","status":"publish","type":"post","link":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/","title":{"rendered":"FPS and battery life"},"content":{"rendered":"<div class=\"taxonomy-category wp-block-post-terms\"><a href=\"https:\/\/systemreset.io\/journal\/category\/dart\/\" rel=\"tag\">Dart<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/systemreset.io\/journal\/category\/game-development\/\" rel=\"tag\">Game development<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/systemreset.io\/journal\/category\/performance\/\" rel=\"tag\">Performance<\/a><span class=\"wp-block-post-terms__separator\">, <\/span><a href=\"https:\/\/systemreset.io\/journal\/category\/wear-os\/\" rel=\"tag\">Wear OS<\/a><\/div>\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve been a fan of Flutter and Dart for some time. Recently I purchased a Wear OS smart watch and I&#8217;m interested in how well a Flutter game will perform on it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My watch is a Mobvoi Ticwatch Pro 5. It&#8217;s a beast, with 2GHz of Ram and a low-power 1.7GHz quad-core GPU. The display is a gorgeous 1.43&#8243; 466*466 AMOLED screen. You can <a href=\"https:\/\/www.mobvoi.com\/us\/pages\/ticwatchpro5\" target=\"_blank\" rel=\"noreferrer noopener\">read the full specs here<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My background is in game development for mobile &#8211; starting back in the day before iOS and Android existed &#8211; when devices had huge limitations in terms of CPU, ram, storage, network, screen size &#8211; you name it! I love working within limitations like these. They represent a special challenge for game design and development!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;m working on a prototype bullet-storm shooter with lots of bullets and particle effects to really try and see what the limitations of Flutter running on Wear OS are. I&#8217;m using a modified version of the <a href=\"https:\/\/flame-engine.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Flame engine<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Limiting the frame rate in Flame<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Flame works by calling an <code>update<\/code> function as often as possible. On desktop this tends to be around 120fps. On the Ticwatch it&#8217;s 60fps. To test the effect of different frame rates I modified the update function to limit the frame rate. Something like this:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"double _renderPeriod = 0.0;\ndouble _elapsedTime = 0.0;\n\n\/\/\/ Set the maximum framerate for the game\nset maxFPS(double? fps) {\n  if (fps == null) {\n    _renderPeriod = 0.0;\n    return;\n  }\n  _renderPeriod = 1.0 \/ fps;\n}\n\n\/\/\/ Ensure the framerate doesn't exceed maximum\n@override\nvoid updateTree(double dt) {\n  _elapsedTime += dt;\n  if (_elapsedTime &gt;= _renderPeriod) {\n    super.updateTree(_elapsedTime);\n    _elapsedTime = 0.0;\n  }\n}\" style=\"color:#575279;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki rose-pine-dawn\" style=\"background-color: #faf4ed\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #56949F\">double<\/span><span style=\"color: #575279\"> _renderPeriod <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0.0<\/span><span style=\"color: #797593\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #56949F\">double<\/span><span style=\"color: #575279\"> _elapsedTime <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0.0<\/span><span style=\"color: #797593\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic\">\/\/\/ Set the maximum framerate for the game<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">set<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">maxFPS<\/span><span style=\"color: #575279\">(<\/span><span style=\"color: #56949F\">double<\/span><span style=\"color: #286983\">?<\/span><span style=\"color: #575279\"> fps) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">  <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> (fps <\/span><span style=\"color: #286983\">==<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">null<\/span><span style=\"color: #575279\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    _renderPeriod <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0.0<\/span><span style=\"color: #797593\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #286983\">return<\/span><span style=\"color: #797593\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">  _renderPeriod <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">1.0<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #286983\">\/<\/span><span style=\"color: #575279\"> fps<\/span><span style=\"color: #797593\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #9893A5; font-style: italic\">\/\/\/ Ensure the framerate doesn&#39;t exceed maximum<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">@override<\/span><\/span>\n<span class=\"line\"><span style=\"color: #286983\">void<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">updateTree<\/span><span style=\"color: #575279\">(<\/span><span style=\"color: #56949F\">double<\/span><span style=\"color: #575279\"> dt) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">  _elapsedTime <\/span><span style=\"color: #286983\">+=<\/span><span style=\"color: #575279\"> dt<\/span><span style=\"color: #797593\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">  <\/span><span style=\"color: #286983\">if<\/span><span style=\"color: #575279\"> (_elapsedTime <\/span><span style=\"color: #286983\">&gt;=<\/span><span style=\"color: #575279\"> _renderPeriod) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    <\/span><span style=\"color: #575279; font-style: italic\">super<\/span><span style=\"color: #797593\">.<\/span><span style=\"color: #D7827E\">updateTree<\/span><span style=\"color: #575279\">(_elapsedTime)<\/span><span style=\"color: #797593\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">    _elapsedTime <\/span><span style=\"color: #286983\">=<\/span><span style=\"color: #575279\"> <\/span><span style=\"color: #D7827E\">0.0<\/span><span style=\"color: #797593\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #575279\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#faf4ed;color:#625c88;font-size:12px;line-height:1;position:relative\">Dart<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Testing the effects of different frame rates<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To perform the tests I repeated these steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Charge the watch to 100%<\/li>\n\n\n\n<li>Set the framerate<\/li>\n\n\n\n<li>Run the game for exactly 30 minutes<\/li>\n\n\n\n<li>Check the battery level<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Here are the results:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>FPS<\/strong><\/td><td><strong>Battery drain<\/strong><\/td><\/tr><tr><td>60<\/td><td>11%<\/td><\/tr><tr><td>30<\/td><td>11%<\/td><\/tr><tr><td>9<\/td><td>11%<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Effects on battery drain of changing FPS<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Analysis of results<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Changing the frame rate made no difference to the battery drain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I was initially surprised, but then I quickly realised that this made sense. <strong>My testing is flawed.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My tests are not changing the fundamental framerate of the app. Under the hood, graphics are still being rendered to the screen at the same rate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s just my higher level <code>update<\/code> function that is being limited. It performs physics calculations and moves objects around, but it&#8217;s not responsible for the actual rendering. So while the animation is choppy and jumpy, the rendering is still happening at the same rate.  <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s an image to illustrate. It shows 10 frames being drawn while the ship is rotating:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"220\" src=\"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/limited-fps-1024x220.png\" alt=\"\" class=\"wp-image-22\" srcset=\"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/limited-fps-1024x220.png 1024w, https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/limited-fps-300x64.png 300w, https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/limited-fps-768x165.png 768w, https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/limited-fps.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">As you can see:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In both cases, the underlying code is updating the frames at the same rate<\/li>\n\n\n\n<li>But when the fps is being limited (incorrectly), only the animation (rotation) is being limited. <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">However, this next image shows what the intended effect of reducing frame rate should be:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"220\" src=\"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/limited-fps-2-1-1024x220.png\" alt=\"\" class=\"wp-image-46\" srcset=\"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/limited-fps-2-1-1024x220.png 1024w, https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/limited-fps-2-1-300x64.png 300w, https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/limited-fps-2-1-768x165.png 768w, https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/limited-fps-2-1.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So back to the drawing board in this one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been a fan of Flutter and Dart for some time. Recently I purchased a Wear OS smart watch and I&#8217;m interested in how well a Flutter game will perform on it. My watch is a Mobvoi Ticwatch Pro 5. It&#8217;s a beast, with 2GHz of Ram and a low-power 1.7GHz quad-core GPU. The display [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":51,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,8,6,7],"tags":[],"class_list":["post-1","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dart","category-game-development","category-performance","category-wear-os"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>FPS and battery life - system reset<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FPS and battery life - system reset\" \/>\n<meta property=\"og:description\" content=\"I&#8217;ve been a fan of Flutter and Dart for some time. Recently I purchased a Wear OS smart watch and I&#8217;m interested in how well a Flutter game will perform on it. My watch is a Mobvoi Ticwatch Pro 5. It&#8217;s a beast, with 2GHz of Ram and a low-power 1.7GHz quad-core GPU. The display [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/\" \/>\n<meta property=\"og:site_name\" content=\"system reset\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-16T00:09:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-23T00:47:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/featured-limited-fps-2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"System Reset\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"System Reset\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/\"},\"author\":{\"name\":\"System Reset\",\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/#\\\/schema\\\/person\\\/06a6e24e1a9461e4155cfc86c122dff5\"},\"headline\":\"FPS and battery life\",\"datePublished\":\"2024-11-16T00:09:52+00:00\",\"dateModified\":\"2024-11-23T00:47:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/\"},\"wordCount\":441,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/featured-limited-fps-2.jpg\",\"articleSection\":[\"Dart\",\"Game development\",\"Performance\",\"Wear OS\"],\"inLanguage\":\"en-NZ\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/\",\"url\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/\",\"name\":\"FPS and battery life - system reset\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/featured-limited-fps-2.jpg\",\"datePublished\":\"2024-11-16T00:09:52+00:00\",\"dateModified\":\"2024-11-23T00:47:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/#breadcrumb\"},\"inLanguage\":\"en-NZ\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-NZ\",\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/#primaryimage\",\"url\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/featured-limited-fps-2.jpg\",\"contentUrl\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/featured-limited-fps-2.jpg\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/fps-and-battery-life\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FPS and battery life\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/#website\",\"url\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/\",\"name\":\"system reset\",\"description\":\"dev journal\",\"publisher\":{\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-NZ\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/#organization\",\"name\":\"system reset\",\"url\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-NZ\",\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/system-reset-stacked-1024-1.png\",\"contentUrl\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/system-reset-stacked-1024-1.png\",\"width\":1024,\"height\":1024,\"caption\":\"system reset\"},\"image\":{\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/systemreset.io\\\/journal\\\/#\\\/schema\\\/person\\\/06a6e24e1a9461e4155cfc86c122dff5\",\"name\":\"System Reset\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-NZ\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/edbe9aa08d216b02d0781180e15a10381c672def2d9ec0eac19143bb28a9284a?s=96&d=blank&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/edbe9aa08d216b02d0781180e15a10381c672def2d9ec0eac19143bb28a9284a?s=96&d=blank&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/edbe9aa08d216b02d0781180e15a10381c672def2d9ec0eac19143bb28a9284a?s=96&d=blank&r=g\",\"caption\":\"System Reset\"},\"sameAs\":[\"https:\\\/\\\/systemreset.io\\\/journal\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"FPS and battery life - system reset","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/","og_locale":"en_US","og_type":"article","og_title":"FPS and battery life - system reset","og_description":"I&#8217;ve been a fan of Flutter and Dart for some time. Recently I purchased a Wear OS smart watch and I&#8217;m interested in how well a Flutter game will perform on it. My watch is a Mobvoi Ticwatch Pro 5. It&#8217;s a beast, with 2GHz of Ram and a low-power 1.7GHz quad-core GPU. The display [&hellip;]","og_url":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/","og_site_name":"system reset","article_published_time":"2024-11-16T00:09:52+00:00","article_modified_time":"2024-11-23T00:47:05+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/featured-limited-fps-2.jpg","type":"image\/jpeg"}],"author":"System Reset","twitter_card":"summary_large_image","twitter_misc":{"Written by":"System Reset","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/#article","isPartOf":{"@id":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/"},"author":{"name":"System Reset","@id":"https:\/\/systemreset.io\/journal\/#\/schema\/person\/06a6e24e1a9461e4155cfc86c122dff5"},"headline":"FPS and battery life","datePublished":"2024-11-16T00:09:52+00:00","dateModified":"2024-11-23T00:47:05+00:00","mainEntityOfPage":{"@id":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/"},"wordCount":441,"commentCount":0,"publisher":{"@id":"https:\/\/systemreset.io\/journal\/#organization"},"image":{"@id":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/#primaryimage"},"thumbnailUrl":"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/featured-limited-fps-2.jpg","articleSection":["Dart","Game development","Performance","Wear OS"],"inLanguage":"en-NZ","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/systemreset.io\/journal\/fps-and-battery-life\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/","url":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/","name":"FPS and battery life - system reset","isPartOf":{"@id":"https:\/\/systemreset.io\/journal\/#website"},"primaryImageOfPage":{"@id":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/#primaryimage"},"image":{"@id":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/#primaryimage"},"thumbnailUrl":"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/featured-limited-fps-2.jpg","datePublished":"2024-11-16T00:09:52+00:00","dateModified":"2024-11-23T00:47:05+00:00","breadcrumb":{"@id":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/#breadcrumb"},"inLanguage":"en-NZ","potentialAction":[{"@type":"ReadAction","target":["https:\/\/systemreset.io\/journal\/fps-and-battery-life\/"]}]},{"@type":"ImageObject","inLanguage":"en-NZ","@id":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/#primaryimage","url":"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/featured-limited-fps-2.jpg","contentUrl":"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/featured-limited-fps-2.jpg","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/systemreset.io\/journal\/fps-and-battery-life\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/systemreset.io\/journal\/"},{"@type":"ListItem","position":2,"name":"FPS and battery life"}]},{"@type":"WebSite","@id":"https:\/\/systemreset.io\/journal\/#website","url":"https:\/\/systemreset.io\/journal\/","name":"system reset","description":"dev journal","publisher":{"@id":"https:\/\/systemreset.io\/journal\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/systemreset.io\/journal\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-NZ"},{"@type":"Organization","@id":"https:\/\/systemreset.io\/journal\/#organization","name":"system reset","url":"https:\/\/systemreset.io\/journal\/","logo":{"@type":"ImageObject","inLanguage":"en-NZ","@id":"https:\/\/systemreset.io\/journal\/#\/schema\/logo\/image\/","url":"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/system-reset-stacked-1024-1.png","contentUrl":"https:\/\/systemreset.io\/journal\/wp-content\/uploads\/2024\/11\/system-reset-stacked-1024-1.png","width":1024,"height":1024,"caption":"system reset"},"image":{"@id":"https:\/\/systemreset.io\/journal\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/systemreset.io\/journal\/#\/schema\/person\/06a6e24e1a9461e4155cfc86c122dff5","name":"System Reset","image":{"@type":"ImageObject","inLanguage":"en-NZ","@id":"https:\/\/secure.gravatar.com\/avatar\/edbe9aa08d216b02d0781180e15a10381c672def2d9ec0eac19143bb28a9284a?s=96&d=blank&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/edbe9aa08d216b02d0781180e15a10381c672def2d9ec0eac19143bb28a9284a?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/edbe9aa08d216b02d0781180e15a10381c672def2d9ec0eac19143bb28a9284a?s=96&d=blank&r=g","caption":"System Reset"},"sameAs":["https:\/\/systemreset.io\/journal"]}]}},"_links":{"self":[{"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/posts\/1","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/comments?post=1"}],"version-history":[{"count":8,"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/posts\/1\/revisions"}],"predecessor-version":[{"id":50,"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/posts\/1\/revisions\/50"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/media\/51"}],"wp:attachment":[{"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/media?parent=1"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/categories?post=1"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/systemreset.io\/journal\/wp-json\/wp\/v2\/tags?post=1"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}