Luca Ottaviano. Ottimizzare applicazioni Qt Gui. Firenze, 8 luglio 2013



Documenti analoghi
C++ E QT, BINOMIO PERFETTO

Inizializzazione, Assegnamento e Distruzione di Classi

INTRODUZIONE AL FRAMEWORK QT

Luca Ottaviano. Everyday Git

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

Introduzione a Qt. Marco Martin

Programmare con Qt4. Ing. Giovanni Venturi Roma, 27 ottobre Linux Day

Modello dei processi. Riedizione delle slide della Prof. Di Stefano

Sistemi Operativi. Scheduling della CPU SCHEDULING DELLA CPU. Concetti di Base Criteri di Scheduling Algoritmi di Scheduling

Sistemi Operativi SCHEDULING DELLA CPU. Sistemi Operativi. D. Talia - UNICAL 5.1

Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web: Prof. G. Quarella prof@quarella.

Introduzione a GCC: GNU Compiler Collection

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Setup e installazione

SOMMARIO. Programmazione orientata agli eventi. Programmazione orientata agli eventi. Programmazione orientata agli eventi

L informatica INTRODUZIONE. L informatica. Tassonomia: criteri. È la disciplina scientifica che studia

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Architettura hardware

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Recupero hardware cosidetto obsoleto Versione 1.0

Ci sono circa centralini in Italia

Sistemi Operativi SCHEDULING DELLA CPU

Gestione della memoria centrale

Virtualizzazione VirtualBox su Host Windows

MDaemon GroupWare Per offrire agli utenti le funzionalità di condivisione calendario, rubrica e gli altri oggetti di OutLook

Materiali per il modulo 1 ECDL. Autore: M. Lanino

Scheduling. Sistemi Operativi e Distribuiti A.A Bellettini - Maggiorini. Concetti di base

Software Open Source per sistemi embedded

1.3c: Font BITMAP e Font SCALABILI

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

MDaemon GroupWare Per offrire agli utenti le funzionalità di condivisione calendario, rubrica e gli altri oggetti di MS Outlook

Concetto di Funzione e Procedura METODI in Java

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Valutazione delle Prestazioni. Valutazione delle Prestazioni. Architetture dei Calcolatori (Lettere. Tempo di risposta e throughput


GESTIONE INFORMATICA DEI DATI AZIENDALI

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi

INFORMATICA 1 L. Mezzalira

Il memory manager. Gestione della memoria centrale

Sistema operativo: Gestione della memoria

Gianni Valdambrini. Everywhere

Approccio stratificato

Appunti di informatica. Lezione 6 anno accademico Mario Verdicchio

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Tutorial Qt software

Organizzazione della memoria

4. Un ambiente di sviluppo per Java

Mon Ami 3000 Centri di costo Contabilità analitica per centri di costo/ricavo e sub-attività

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Il software di base comprende l insieme dei programmi predisposti per un uso efficace ed efficiente del computer.

Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE. D. Talia - UNICAL. Sistemi Operativi 6.1

LINGUAGGI DI PROGRAMMAZIONE

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

CREARE UNA LIBRERIA IN C

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Arduino: Programmazione

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Memoria Secondaria o di Massa

Allocazione dinamica della memoria - riepilogo

GESTIONE DEI PROCESSI

TERM TALK. software per la raccolta dati

1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo di Holt 4 Thread 5 Sincronizzazione tra processi

Creare un applicazione con Qt Creator in pochi semplici passi

dall argomento argomento della malloc()

CONCETTI BASE dell'informatica Cose che non si possono non sapere!

ESERCIZIO 1 (b) Dove è memorizzato il numero del primo blocco del file? Insieme agli altri attributi del file, nella cartella che contiene il file.

Corso di Informatica

Funzioni in C. Violetta Lonati

Input/Output. Moduli di Input/ Output. gestiscono quantità di dati differenti a velocità diverse in formati diversi. n Grande varietà di periferiche

Tecniche di traduzione da C ad assembly Note generali

Esempi di algoritmi. Lezione III

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Agent, porte, connettività e reti L agent di Kaseya utilizza la porta 5721 per comunicare con il server, ma che tipo di porta è?...

Struttura del calcolatore

Architettura del calcolatore

Il sistema operativo TinyOS

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

Informazione analogica e digitale

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Creare una Rete Locale Lezione n. 1

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

Rete di accesso / Rete di trasporto

Sistemi Operativi GESTIONE DELLA MEMORIA SECONDARIA. D. Talia - UNICAL. Sistemi Operativi 11.1

Sistemi Operativi. Memoria Secondaria GESTIONE DELLA MEMORIA SECONDARIA. Struttura del disco. Scheduling del disco. Gestione del disco

Doc2Net è un sistema per. dei processi di archiviazione documentale in ambiente WEB

Cognome: Nome: Matricola: Sicurezza dei sistemi informatici e delle reti 18 febbraio 2014

Transcript:

Luca Ottaviano Ottimizzare applicazioni Qt Gui Firenze, 8 luglio 2013

Chi sono Luca Ottaviano lottaviano@develer.com @lucaotta Sviluppatore su sistemi embedded presso Develer Qt certified developer Sviluppatore Python

Prerequisiti Conoscenza dei meccanismi di base di Qt Signal/slots Implicit sharing Gestione della memoria tramite parent/child Conoscenza di Qt GUI Programma compilato su PC!

La vostra applicazione è compilabile su PC, vero? Ciclo code build test molto più veloce Strumenti di debugging più comodi Possibilità di profilazione Unit test Doppia implementazione

Tips and tricks Test dell'architettura nei file di progetto Abilitare selettivamente il codice usando macro Compilare sempre su PC e almeno una volta al giorno su board

Strumenti di profiling Callgrind: tempo di esecuzione Massif: occupazione di memoria Qml profiler: tempo di esecuzione specifico per QML

Evitare i calcoli floating point

Floating point: tipologie Soft: emulazione completa Softfp: passare i parametri all'fpu nei registri interi Hardfp: parametri di funzioni nei registri FPU Disponibile da GCC 4.5 Cortex-A8 Riferimenti: http://wiki.debian.org/armhardfloatport/vfpcomparison

Floating point: performance Emulazione molto lenta (50x 100x) di hard float Su processori piccoli (250 Mhz) si sente Pochi calcoli sono ammessi

Esempio: widget di un grafico

Invocazione di funzioni tramite signal/slot

Signal/slots Spezzano il flusso del codice Difficile fare review Sono sincroni (tranne un tipo) Sono LENTI! Circa 100x rispetto a chiamare lo slot direttamente Evitarli nei loop stretti

Esempio: loop stretto con segnali Widget::Widget(QObject *parent): QObject(parent){ connect(this, &Widget::sig1, this, &Widget::doSomething); } int Widget::entryPoint(int var) { for (int i = 0; i < var; ++i) { emit sig1(i); // dosomething(i); } return var; } int Widget::doSomething(int i) { return i + i; }

Esempio: loop stretto con segnali (2) int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; QTime start; start.start(); w.entrypoint(10000000); qdebug() << "Time elapsed:" << start.elapsed(); } return a.exec();

Esempio: risultati Debug (= senza ottimizzazione) Signal/slot = 853 ms Function call = 35 ms Release (= -02) Signal/slot = 705 ms Function call = 0 ms (!) _ZN6Widget10entryPointEi(): 401ac0: 89 f0 mov %esi,%eax 401ac2: c3 retq

Styling tramite CSS

QWidget e i CSS Non abusare dei CSS La valutazione di un CSS è lenta Preferire uno stylesheet a livello di applicazione Minimizza l'uso di memoria Usare le property per cambiare CSS applicato

Esempio: property vs nuovo stylesheet // MyWidget.cpp... Qstring s = "QWidget[SecondFgColor=\"true\"] {color:#6fb2ff;}" this >setstylesheet(s);... // CSS QWidget[SecondFgColor="true"] {color:#6fb2ff;} // MyWidget.cpp... this >setproperty("secondfgcolor", true); this >style() >polish(this);...

Gestione della memoria

Tempo di vita degli oggetti In C++ allocare un oggetto con new è un leak......a meno che non si distrugga con delete...oppure si assegni il parent del Qobject ATTENZIONE! Finchè il parent resta vivo, gli oggetti restano in vita Esempio: QTcpServer::nextPendingConnection()

Gestione della memoria (1) int main (int argc, char **argv) { // setup the GUI and Qapplication //... QPixmap splashpixmap( ":/img/splash.png" ); QSplashScreen splash(splashpixmap); splash.show(); } splash.finish(&main_window); return app.exec()

Gestione della memoria (2) MySplashScreen::MySplashScreen(const QString &path) : QSplashScreen(QPixmap(path)) { } int main(int argc, char **argv) { // setup the GUI and Qapplication //... MySplashScreen *splash = new MySplashScreen(":/img/splash.png"); splash >setattribute(qt::wa_deleteonclose); splash >show(); } splash >finish(&main_window); return app.exec();

Le dimensioni contano Usare immagini di dimensioni giuste Si usa solo la memoria necessaria Attenzione a QpushButton e Qicon Attenzione al GUI Designer! Non condivide le pixmap tra form diverse

Usare hardware adeguato 1 pixmap 1024 x 768 x 32 sono 2.3 Mb di RAM ~3.5% su un sistema con 64 Mb 10 icone 50 x 50 x 32 sono 100 kb di RAM ~ 1% su un sistema con 64 Mb Di solito ci sono centinaia di icone!

Font prerenderizzati (QPF2) Font non scalabili (bitmap) Dimensione fissa Poco costo di CPU per gestirli (rispetto ai TTF) Possono gestire tutte le lingue

Scrivere widget custom I widget standard sono generici Non molto efficienti Ottimizzare usando il QPainter Non riscrivere prima di aver fatto profiling!

Let's Talk office +39 055 3984627 (218) e-mail lottaviano@develer.com web www.develer.com twitter @lucaotta Credits Le immagini sono prese dal libro Pro Git http://git-scm.com/book