Alberto Mancini - A few benchmark on Android
Upcoming SlideShare
Loading in...5

Alberto Mancini - A few benchmark on Android



Alberto Mancini - A few benchmark on Android

Alberto Mancini - A few benchmark on Android

15 Aprile 2014 - ANdroid conference Ancona - GDG Ancona



Total Views
Views on SlideShare
Embed Views



3 Embeds 6 4 1 1


Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Alberto Mancini - A few benchmark on Android Alberto Mancini - A few benchmark on Android Presentation Transcript

  • ANdroid A few Benchmarks Alberto Mancini - Francesca Tosi 15 Aprile 2014
  • HTML5Dev
  • Itjustwasn'tready Si riferiva a FB su mobile che era web based e stava facendo la prima intervista “After the company’s continuous stock price drop” (ndr)
  • fastbook fastbook, Sencha’s fb demo client "... is really promising, but it is running in the “browser”. When you make an “installable” app, you can only use WebView, which is a second-class and slower browser." It's a technology demo that shows what developers can do with HTML5 if they take the right approach, and use the right frameworks and tools
  • (*)WebApps ● cached ● offline capable ● mobile-webapp-capable ● Homescreen-installed ● hosted app ● packaged app secondo alcuni sono una liberazione dai marketplace (i.e. Google Play & AppStore) secondo alcuni tra l’altro alcune tecnologie vengono ritardate dai produttori per non perdere il potere che viene dai marketplace
  • GWT/MGWT Java to Javascript compiler Emulated JRE Widgets Deferred Binding Multiple Browsers Compiled Resources ...
  • xché una codebase e tante 'incarnazioni' dell'applicazione.
  • MarkerBasedAR c.a. 25 fps
  • GWT-Boofcv GWT-Boofcv sample at:
  • GWT-Boofcv GWT-Boofcv sample at:
  • strategy ● native ? ● hybrid ? ● browser-based ?
  • Native,NDK capire quanto possiamo guadagnare in termini di performance basandoci su differenti tecnologie Applicazione Android NDK che usa librerie native Applicazione Android Java per Dalvik
  • Benchmarks il medesimo algoritmo implementato con tecnologie diverse eseguito sul medesimo dispositivo
  • Benchmark In entrambe le applicazioni precedenti una operazione semplice ma computazionalmente costosa è fare la conversione in grayscale delle immagini
  • Rules RGB jbyte[1024*1024*3] Average on 1000 runs gray jbyte[1024*1024] 1 0.299*R+0.587*G+0.114*B → Y 2 3
  • Testdevice Galaxy Tab3 Intel Atom CPU Z2560 2 core - 1.60 GHz Android 4.4.2 Architettura i686
  • Competitors Benchmarks on: Java <byte> NDK <jbyte> IPP <Ipp8u>
  • Competitors Benchmarks on: Java <byte> NDK <jbyte> IPP <Ipp8u> Intel Integrated Performance Primitives
  • Competitors Benchmarks on: Java <byte> NDK <jbyte> IPP <Ipp8u> Chrome <Uint8Array> Firefox <Uint8Array> Aurora <Uint8Array>
  • Codice(Java) Java: void compute(byte[] in, byte[] out) { for(int i=0, j=0; i< out.length; i++, j+=3) out[i] = (byte)(0.299 * in[j] + 0.587 * in[j+1] + 0.114 * in[j+2]); } Using FP arithmetics !! We cannot (at least without asm.js) coherce numbers to integers in js so we chosen not to optimize here.
  • Details(NDK) La documentazione non e’ il punto di forza dell’ NDK ● start the (intel) avd ● enter in the jni folder & execute 'ndk-build' ● from the CPUIDApp root dir execute 'ant debug' ● adb install -r bin/CPUIdApp-debug.apk
  • Codice(C,jni) void JNICALL … jbyteArray in, jbyteArray out) { jsize len_out = (*env)->GetArrayLength(env, out); ... jbyte *body_out = (*env)->GetByteArrayElements(env, out, 0); for(i=0, j=0; i< len_out; i++, j+=3) body_out[i] = (jbyte)(0.299 * body_in[j] + … ); (*env)->ReleaseByteArrayElements(env, in, body_in, 0); ... }
  • Details(IPP) Bundled in BeaconMountain beh … la ‘preview’ … ed avete la IPP per android x86 !!! Scaricate la versione per linux ( la evaluation, or 199$ :( ) Installatela ( vi serve una macchina linux ) Copiate le librerie (*.a) e gli include (*.h) (32bit statici non-threaded)
  • Codice(IPP) … jni ... IppiSize srcRoi = { 1024, 1024 }; Ipp8u* pSrc = body_in; Ipp8u* pDst = body_out; ippiRGBToGray_8u_C3C1R(pSrc ,1024, pDst, 1024, srcRoi); … jni ...
  • Resultsnative
  • Resultsnative min max avg
  • Codice(js) var len_out = outb.length; var i,j; for(i=0, j=0; i< len_out; i++, j+=3) outb[i] = (0.299 * inb[j] + 0.587 * inb[j+1] + 0.114 *inb[j+2]); var buffer_in = new ArrayBuffer(size*3); var buffer_out = new ArrayBuffer(size); var inb = new Uint8Array(buffer_in); var out = new Uint8Array(buffer_out);
  • Resultsjs min max avg
  • Grazie Francesca Tosi Alberto Mancini Github:
  • Details(HAXM) Bundled in BeaconMountain accelerated-execution-manager cambia la vita con le immagini x86 Attenzione pianta OSX, maverick installare lo hotfix