MediaWiki API result

This is the HTML representation of the JSON format. HTML is good for debugging, but is unsuitable for application use.

Specify the format parameter to change the output format. To see the non-HTML representation of the JSON format, set format=json.

See the complete documentation, or the API help for more information.

{
    "batchcomplete": "",
    "continue": {
        "gapcontinue": "Software",
        "continue": "gapcontinue||"
    },
    "warnings": {
        "main": {
            "*": "Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/postorius/lists/mediawiki-api-announce.lists.wikimedia.org/> for notice of API deprecations and breaking changes."
        },
        "revisions": {
            "*": "Because \"rvslots\" was not specified, a legacy format has been used for the output. This format is deprecated, and in the future the new format will always be used."
        }
    },
    "query": {
        "pages": {
            "494": {
                "pageid": 494,
                "ns": 0,
                "title": "STM32MP1 Browser Performance",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "== Performance Tests with hardware acceleration (etnaviv) ==\n=== \"Infragistics Ignite UI\" Demo Application ===\n[[File:Infragistics.png|frameless]]<br>\nThe \"Infragistics Ignite UI\" is a commercial WebUI framework based on Angular. <br>\nTo test the browser perfomance a WebUI based on that framework was used.\n\n\n[[File:BardiagramIgnite.png|frameless]]<br>\nTo open the screen in the above screenshot it takes approx. 3 seconds from menu click until content is fully visible\n\nTo get some insights the chromium profiling was used.\n\n\n[[File:ChromeProfilingIgnite.png|frameless]]\n\nWith the Chrome Profiler one can make following conclusions:\n* the CPU does most of the work\n* there is no obvious point where CPU cycles would be spent excessively (perf doesn't indicate anything).\n* approx. 70% of the time is spent interpreting Javascript. This is also to be expected, since this angular is full of complex Javascript.\n* But that also means the slowness is caused by the CPU / website\n* not much the GPU can do about this.\n\n=== Line-Chart Demo Application ===\n[[File:ChartLineWithGPU.png|frameless]]\n\nhttps://www.dropbox.com/s/323nv90lhp9wh02/mit_GPU.MP4?dl=0 \n\n* with GPU support\n* 20 - 30 fps\n* works very well\n\n=== DH demo from tradeshow ===\n[[File:TradeshowDemo.png|frameless]]\n\nhttps://www.dropbox.com/s/rzeu2qk95oxy4lw/sensorless_demo_filtered_idastroem_DH%20electronics.mp4?dl=0\n\n=== Webgl example (aquarium) ===\nhttp://webglsamples.org/aquarium/aquarium.html?numFish=1&canvasWidth=800&canvasHeight=480\n\n[[File:Webgl aquarium.png|frameless]]\n\nRunning a webgl example page (fishtank) on the STM32MP1 (etnaviv) with Chromium under a resolution of 800x600 results in '''3fps'''.\n\n=== 3D-animation and video as texture ===\n[[File:3danimation.png|frameless]]\n\nhttps://www.dropbox.com/s/323nv90lhp9wh02/mit_GPU.MP4?dl=0 \n\nThe cube runs very smooth with at least 40fps.\n\n=== Conclusion ===\nWebapplications must be optimized for particular embedded system resp. SOC. Heavy WebGL applications are not suited for this platform.<br>\nNevertheless appealing web pages with responsive requirements on the STM32MP1 are possible.\n\n== Performance Tests with software renderning (without GPU) ==\n=== Line-Chart Demo Application ===\n[[File:ChartLineWithoutGPU.png|frameless]]\n\nhttps://www.dropbox.com/s/kprvgowf8kzod6a/ohne_GPU.MP4?dl=0\n\n* without GPU (Software Rendering)\n* < 1 fps\n* too slow to be usable\n\n=== 3D-animation and video as texture ===\n[[File:3danimation.png|frameless]]\n\nhttps://www.dropbox.com/s/323nv90lhp9wh02/mit_GPU.MP4?dl=0 \n\nThe cube does not even show up on the screen.\n\n=== Conclusion ===\nSoftware Rendering (with no GPU) is no option on the STM32MP1 for graphical webinterfaces were responsiveness is required.\n\n== drawElements Quality Program (deqp) ==\nThe drawElements Quality Program (deqp) is a benchmarking system for measuring the quality of GPUs and their drivers.<br>\n\nIt can be started from the commandline with the following script (no display needed):\n<syntaxhighlight lang=\"sh\" line>\n #!/bin/sh\n \n export GPU_TESTS='dEQP-GLES2.performance*'\n \n export ETNA_MESA_DEBUG=nir\n export EGL_PLATFORM=surfaceless\n export XDG_RUNTIME_DIR=/var/run/user/`id -u`/\n \n # Observe that GPU is rendering:\n # dstat -i -I `grep gpu /proc/interrupts | cut -d : -f 1`\n \n cd /usr/share/deqp/gles2/\n \n unset LIBGL_ALWAYS_SOFTWARE\n unset GBM_ALWAYS_SOFTWARE\n \n ./deqp-gles2 \\\n          --deqp-surface-width=256 \\\n          --deqp-surface-height=256 \\\n          --deqp-surface-type=pbuffer \\\n          --deqp-gl-config-name=rgba8888d24s8ms0 \\\n          --deqp-visibility=hidden \\\n          --deqp-log-images=enable \\\n          --deqp-crashhandler=enable \\\n          --deqp-log-filename=hardware.qpa \\\n          -n ${GPU_TESTS} 2>&1 | tee hardware.log \n \n ../tools/testlog-to-xml hardware.qpa hardware.xml\n \n export LIBGL_ALWAYS_SOFTWARE=true \n \n # Observe results using a browser, run the following # $ ln -s ../tools/testlog.* .\n # $ python3 -m http.server \\\n #       --bind 0.0.0.0 \\\n #       --directory /usr/share/deqp/gles2/ 8080\n # Navigate to http://IP-of-the-board:8080\n</syntaxhighlight>\n\nThe deqp run on the STM32MP1 (etnaviv driver) gives the following results:\n Test run totals:\u00a0 \n        Passed:\t\t1729/1783\t97.0%\u00a0 \n        Failed:\t\t  54/1783       33.0%\u00a0 \n        Not supported:\t   0/1783        0.0%\u00a0 \n        Warnings:\t   0/1783        0.0%\n\nThe full logs can be found here:<br>\n[https://www.dropbox.com/s/iyro4ulsb0x96uo/STM32MP1_deqp_logs.zip?dl=0 STM32MP1_deqp_logs.zip]\n\n== Glmark2 Benchmark ==\nA Glmark2 Benchmark was run on the STM32MP1 with an 800x600 resolution with the following command:\n{|\n| \n glmark2-es2-drm --off-screen -s 800x600 --annotate\n|}\n\nWith the following results:\n{|\n|\n =======================================================\n     glmark2 2017.07\n =======================================================\n     OpenGL Information\n     GL_VENDOR:     etnaviv\n     GL_RENDERER:   Vivante GC400 rev 4652\n     GL_VERSION:    OpenGL ES 2.0 Mesa 20.2.2 (git-df2977f871)\n =======================================================\n [build] use-vbo=false: FPS: 182 FrameTime: 5.495 ms\n [build] use-vbo=true: FPS: 221 FrameTime: 4.525 ms\n [texture] texture-filter=nearest: FPS: 176 FrameTime: 5.682 ms\n [texture] texture-filter=linear: FPS: 174 FrameTime: 5.747 ms\n [texture] texture-filter=mipmap: FPS: 177 FrameTime: 5.650 ms\n [shading] shading=gouraud: FPS: 149 FrameTime: 6.711 ms\n [shading] shading=blinn-phong-inf: FPS: 89 FrameTime: 11.236 ms\n [shading] shading=phong: FPS: 51 FrameTime: 19.608 ms\n [shading] shading=cel: FPS: 30 FrameTime: 33.333 ms\n [bump] bump-render=high-poly: FPS: 60 FrameTime: 16.667 ms\n [bump] bump-render=normals: FPS: 141 FrameTime: 7.092 ms\n [bump] bump-render=height: FPS: 90 FrameTime: 11.111 ms\n [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 25 FrameTime: 40.000 ms\n [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 4 FrameTime: 250.000 ms\n [pulsar] light=false:quads=5:texture=false: FPS: 106 FrameTime: 9.434 ms\n [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 11 FrameTime: 90.909 ms\n [desktop] effect=shadow:windows=4: FPS: 54 FrameTime: 18.519 ms\n [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 31 FrameTime: 32.258 ms\n [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 30 FrameTime: 33.333 ms\n [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 39 FrameTime: 25.641 ms\n [ideas] speed=duration: FPS: 41 FrameTime: 24.390 ms\n [jellyfish] <default>: FPS: 21 FrameTime: 47.619 ms\n Error: SceneTerrain requires Vertex Texture Fetch support, but GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS is 0\n [terrain] <default>: Unsupported\n [shadow] <default>: FPS: 42 FrameTime: 23.810 ms\n [refract] <default>: FPS: 9 FrameTime: 111.111 ms\n [conditionals] fragment-steps=0:vertex-steps=0: FPS: 103 FrameTime: 9.709 ms\n [conditionals] fragment-steps=5:vertex-steps=0: FPS: 33 FrameTime: 30.303 ms\n [conditionals] fragment-steps=0:vertex-steps=5: FPS: 97 FrameTime: 10.309 ms\n [function] fragment-complexity=low:fragment-steps=5: FPS: 60 FrameTime: 16.667 ms\n [function] fragment-complexity=medium:fragment-steps=5: FPS: 27 FrameTime: 37.037 ms\n [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 57 FrameTime: 17.544 ms\n [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 57 FrameTime: 17.544 ms\n [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 29 FrameTime: 34.483 ms\n =======================================================\n                                   glmark2 Score: 75\n =======================================================\n|}\n\n== Tasks of the GPU ==\n* For \u201esimple\u201c webpages without 3D-features, the GPU is only used for \u201eblitting\u201cduring a process step called \u201eRaster(ization) and Compositing\u201c\n* \u201eblitting\u201c = fast copy and move of memory objects\n* By this, a strong relief of the CPU can be achieved\n* this should be well possible with the STM32MP1\n\n== Some Toughts about Javascript performance ==\n====Is it correct, that since js is interpreted and is not thread safe, js of a single webpage does not make use of multithreading/multiprocessing? ====\nJS is interpreted, yes. However, both the chromium v8 engine and firefox tracemonkey are JIT compilers and turn that JS into code native to the architecture on which they are running. This leads to a huge performance boost compared to simple interpreting. The JS JIT compilation can be parallelized.<br>\n\nJS is synchronous and has no concept of threads. However, there are these Promise() things and events (like timer callbacks). The JS engines generally have separate thread(s) to deal with such events, so the JS code can set up some \"async\" operation by calling a function (e.g. load something from somewhere) that triggers a JS function on completion. What happens is that the JS itself runs on CPU0, while a thread doing that loading runs on CPU1, and suddenly your javascript  uses two CPU cores.<br>\n\nSo if you add those two points above together, you get that contemporary JS engines and the way contemporary JS is written end up using multiple CPUs. It is just not done in the traditional manner and it does look like a lot of crutches indeed.\n\n== Profiling with Chrome DevTools ==\nChrome DevTools is a set of web developer tools built directly into the Google Chrome browser. It is possible to analyse the runtime performance of a website directly on the target or remote with an PC connected over ethernet.\nWith an remote connection you can measure the performance without interfering the measurment itself.\nThe Chrome DevTools can also be used with an qtWebengine.\n\n=== How to use Chrome DevTools with an remote connection ===\nTo be able to remote debug chromium on the target you need to start the chromium or qWebengine with the following parameters:\t<br>\n<code>-remote-debugging-port=9222 --user-data-dir=remote-profile</code>\n\n\nTo access it from a different computer you need to forward the port with ssh:<br>\n<code>ssh -L 0.0.0.0:9223:localhost:9222 localhost -N</code><br>\nThis must be done before the webbrowser gets started.\n\n\nWith an Chrome Browser on an computer connected with the target over ethernet you can now open the devtools with the IP of the target and the port \"9223\".<br>\nThis clip shows you how to open den chrome devtools within chrome: [https://www.dropbox.com/s/eglz5nww9fln2px/devtools-open.mp4.mp4?dl=0 devtools-open.mp4]\n\n=== DevTools analysis ===\nThe following tools can be used for performance anlaysis:\n* CPU Usage:<br>\n:[[File:ChromeDevToolsCPU.png|frameless]]\n:[https://www.dropbox.com/s/0ncbddphavd192x/devtools-performance-monitor-cpu.mp4?dl=0 devtools-performance-monitor-cpu.mp4]\n:With this stat you can easily see when the CPU is under full load.<br>\n\n\n\n* GPU Usage:\n:[[File:ChromeDevToolsGPU.png|frameless]]\n:The graph shows when the GPU is under use. But it does not show the GPU load in percent.<br>\n:It is a useful tool to see if the GPU is fully ocupied.<br>\n:If the GPU is disabled (software rendering) this graph is absent.\n\n\n* Frame Rendering Stats:\n:[[File:ChromeDevToolsFrameRendering.png|frameless]]\n:Newer chrome versions don't show live FPS anymore. But you can us \"dropped\" or \"delayed\" frames as indicator for good or bad performance. The higher the percentage value (frames rendered in time) the better. <br>\n:A good explanation can be found here:\n:https://groups.google.com/a/chromium.org/g/blink-dev/c/iHULoSyUxOQ\n\n\n* Performance Profile:\n:[[File:ChromedevtoolsPerformanceProfiling.png|frameless]]\n:[https://www.dropbox.com/s/fdpj4fp4oecxfkk/devtools-start-performance-profiling.mp4?dl=0 devtools-start-performance-profiling.mp4]\n:The performance profile gives you an overview over all important stats at once. You can record it while browsing through an website on the target.<br>\n:You can save such profiles and import it with any other chrome browser to analyse the profile offline."
                    }
                ]
            },
            "360": {
                "pageid": 360,
                "ns": 0,
                "title": "Setup Yocto for Dizzy/Krogoth",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "== Setup Yocto Build System ==\n\n==== Install Required Host Packages ====\n\nInstall the required packages for your host development system.  The Yocto Project documentation has a listing of install commands for many different linux host systems (Debian, Ubuntu, etc.).\n\n[http://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#required-packages-for-the-host-development-system Required Packages for the Host Development System] \n\n==== Download and Install Google's repo utility ====\n\nThe BSP is based on the Yocto Project, which consists of a number of applicable metadata 'layers'.  These are managed by the repo utility.<br />\n $: mkdir ~/bin\n $: curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo\n $: chmod a+x ~/bin/repo\n\n==== Create the BSP directory to download all of the metadata for the BSP layers ====\nNote: You can use your own BSP directory. In the following we use <code>~/fsl-community-bsp</code>\n $: PATH=${PATH}:~/bin\n $: cd\n $: mkdir fsl-community-bsp\n $: cd fsl-community-bsp\n\n==== Initialize the repositories ==== \n\nThe next step is to initialize the repositories. This establishes which branch of the repository will be used for your development. The ''master'' branch is the current development branch. \n\n<span style=\"color:red\">Note: The master branch is a development branch, not a stable branch.  It is constantly changing with code updates, the adding of new features, and so forth.</span>\n\n For Dizzy use:\n $: repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b dizzy\n \n For Krogoth use:\n $: repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b krogoth\n\n==== Download all of the metadata for the BSP layers ====\n\n $: repo sync\n\nOnce this has completed, you should have all of the metadata source of the Freescale Community BSP in fsl-community-bsp.\n\n==== Add DHCOM i.MX6 BSP layer ====\n\nTo clone the OpenEmbedded / Yocto BSP layer for DHCOM i.MX6 execute the following steps:\n\n $: cd fsl-community-bsp/sources\n \n For Dizzy use:\n $: git clone -b dizzy https://github.com/dh-electronics/meta-dhcom_imx6.git\n \n For Krogoth use:\n $: git clone -b krogoth https://github.com/dh-electronics/meta-dhcom_imx6.git\n\nEdit <code>~/fsl-community-bsp/build/conf/bblayers.conf</code> (run bitbake once to create build directory, see 'Setup environment and build an image') to add the meta-dhcom_imx6 layer at the end:\n\n ${BSPDIR}/sources/meta-dhcom_imx6 \\\n\n== Setup environment and build an image ==\n\nTo start a build, first set the MACHINE shell environment variable to set the machine.  These are: <br/>\n{| border=\"1\"  style=\"border-collapse:collapse; height:150px; width:500px; margin: 1em auto 1em auto;\"\n|+DHCOM i.MX6 Machines in Yocto\n! Board Type !! HW !! MACHINE\n|- align=\"left\"\n| DHCOM i.MX6 Solo || 200 || <code>  dhcom2bimx6s  </code> (former dhcomimx6s)\n|- align=\"left\"\n| DHCOM i.MX6 DualLite || 200 || <code>  dhcom2bimx6dl    </code> (former dhcomimx6dl)\n|- align=\"left\"\n| DHCOM i.MX6 Dual || 200 || <code>  dhcom2bimx6d  </code>\n|- align=\"left\"\n| DHCOM i.MX6 Quad || 200 || <code>  dhcom2bimx6q  </code> (former dhcomimx6q)\n|-\n|\n|- align=\"left\"\n| DHCOM i.MX6 Solo || 300 || <code>  dhcom3bimx6s  </code>\n|- align=\"left\"\n| DHCOM i.MX6 DualLite || 300 || <code>  dhcom3bimx6dl    </code>\n|- align=\"left\"\n| DHCOM i.MX6 Dual || 300 || <code>  dhcom3bimx6d  </code>\n|- align=\"left\"\n| DHCOM i.MX6 Quad || 300 || <code>  dhcom3bimx6q  </code>\n|-\n|\n|- align=\"left\"\n| DHCOM i.MX6 Solo || 400 || <code>  dhcom4bimx6s  </code> (new)\n|- align=\"left\"\n| DHCOM i.MX6 DualLite || 400 || <code>  dhcom4bimx6dl    </code> (new)\n|- align=\"left\"\n| DHCOM i.MX6 Dual || 400 || <code>  dhcom4bimx6d  </code> (new)\n|- align=\"left\"\n| DHCOM i.MX6 Quad || 400 || <code>  dhcom4bimx6q  </code> (new)\n|}\n\nFor example, if you have a DHCOM i.MX6 Duallite HW300, then use MACHINE \"dhcom3bimx6dl\".\n\nRun the <code>setup-environment</code> script.  This is a helper script which sets up the environment and creates a build directory for you.  The first time you run this, you will be asked to accept the Freescale end user license agreement (EULA).\n\n $: MACHINE=dhcom3bimx6dl source ./setup-environment build\n\nRun bitbake with <code>core-image-minimal</code> as its argument.  This will create a small image and should have the shortest possible build time.  Note: all of the sources are downloaded from the internet and built from scratch.  This includes the toolchain (gcc) and all of the native utilities, so building an image for the first time could take a few hours, depending on the performance of your host machine.\n\n $: bitbake core-image-minimal\n\n==== Locating the images and installing to a microSD card ====\nOnce the image is built successfully, there are several target images that are built by default.  One of these is an image suitable for loading directly into an SD card.  It contains all of the required binaries (bootloader, kernel, filesystem) in a preformatted binary image.\n\nYou can find the image at:\n\n  build/tmp/deploy/images/<MACHINE>/core-image-minimal-<MACHINE>.sdcard\n\nThe <code>.sdcard</code> image can be directly copied to an SD card with the <code>dd</code> command:\n\n $ sudo dd if=tmp/deploy/images/<MACHINE>/core-image-minimal-<MACHINE>.sdcard of=/dev/sd<N> bs=1M\n\nNote: '''<MACHINE>''' in the above corresponds to the MACHINE name provided to bitbake. '''\"N\"''' in the above command is the letter assigned to the SD card.  This will vary depending on your host machine configuration.\n\n==== Running the image on DHCOM i.MX6 ====\nAs this is just a console image, you will need a serial terminal program such as minicom in order to interact with the board and run commands.  Simply plug the microSD card into the slot on the DHCOM i.MX6 module and apply power.  You should immediately see log messages in the serial terminal.  When complete, you should get a login prompt:\n\n Poky (Yocto Project Reference Distro) 2.1.2 dhcom3bimx6dl /dev/ttymxc0<br/>\n dhcom3bimx6dl login:\n\nThe default login username is 'root' and there is no password.\n\n=== Other interesting images ===\n\nThe image <code> core-image-minimal</code> builds relatively quickly due to its small size.  It is a good image to test to see if your board works.  There are other images that you can also try, but can take a good deal longer to build.\n\n{| border=\"1\" cellpadding=\"5\" style=\"border-collapse:collapse; height:150px; margin: 1em auto 1em auto;\"\n! Image\n! Description\n|-\n! core-image-base\n| Basic image with kernel modules and other features\n|-\n! core-image-x11\n| Basic image with X11 support\n|-\n! core-image-sato\n| Image with Sato, a mobile environment and visual style for mobile devices.<br/>The image supports X11 with a Sato theme, Pimlico applications, and contains terminal, editor, and file manager.\n|}"
                    }
                ]
            }
        }
    }
}