SlideShare une entreprise Scribd logo
1  sur  86
Télécharger pour lire hors ligne
OWB
 v3
Position


• Browser fragmentation
• WebKit derivative
• Leveraging WebKit for CE
Browser
       Fragmentation

• Wide range of offering in the Browser’s
  space for Desktop
• Differents in Embedded constraints
Browser
      Fragmentation
• NetFront
• OpenWave
• Opera
Royalty-based, Proprietary
Browser
       Fragmentation
• Firefox, Fennec: not ready for the game
• WebKit
 • Pleyo has been pushing WebKit for
    embedded systems since 2006
  • iPhone and Nokia S60 Series proved this
    choice to be sharp
  • LiMo, Android Adoption
Paving the way to broader
     WebKit adoption
• WebKit for iPhone: specific MobileSafari
  proprietary code
• WebKit for S60: months of refactoring
  engineering. Project is dead-born...And
  dead
• Almost definitively forked from WebKit
  trunk because of this huge refactory
Paving the way to broader
     WebKit adoption

• Offer a simple way to port WebKit
• Saves the client from WebKit update
  concern
• Leverage code reuse from a port to
  another
OWB
 v3
OWB
 v3
OWB

• OWBAL Abstraction Layer: simplify WebKit
  port
• Extensive and automated testing
• Warrant of a clean WebKit Port
• Respects Device & System limitations
OWB


• Library-dependent instead of Platform-
  dependent
• Freedom of choice : a feature set associated
  to libraries should or shouldn’t be
  integrated
OWB Control API




                                                                Javascript API       Javascript API




                                                 AddOn engine
                                Optimizations
             WebKit


                                                                   AddOns                 AddOns
                                                                Implementation      Implementation




              WKAL                                                          Private BAL



                                                OWBAL

Graphics   Network    Types                                           ...




                              Middleware, Libs, OS...
OWB Control API




                                                                 Javascript API       Javascript API




                                                  AddOn engine
                                 Optimizations
             WebKit


                                                                    AddOns                 AddOns
                      Objects connected                          Implementation      Implementation
                         to WebKit

              WKAL                                                           Private BAL



                                                 OWBAL

Graphics   Network     Types                                           ...




                               Middleware, Libs, OS...
OWB Control API




                                                                Javascript API       Javascript API




                                                 AddOn engine
                                Optimizations
             WebKit


                                                                   AddOns                 AddOns
                                                                Implementation      Implementation




              WKAL                                                          Private BAL


                                                                     Technical Classes for
                                                OWBAL
                                                                      WebKit or others
Graphics   Network    Types                                           ...




                              Middleware, Libs, OS...
OWB Control API
•   Inspired by Win32 WebKit

    •   Configuration Management

    •   URL Management (Stop, Reload, Back, ...)

    •   History Management

•   Seamless Integration with foreign apps

    •   WebView management

•   Platform specific features: Clipboard, Download...
OWB Control API
WebCore::BackForwardList* getBackForwardList();
bool goToBackForwardItem(WebCore::HistoryItem* item);
bool canGoBack();
bool canGoBackOrForward(int steps);
bool CanGoForward();
void goBack();                                         Sample from
void goBackOrForward(int steps);
void goForward();                                       WebView
void stopLoading();
void open(const char* uri);
void reload();
void loadString(const char* content, const char* content_mime_type,
const char* content_encoding, const char* baseUri);
void loadHtmlString(const char* content, const char* base_uri);
bool searchText(const char* string, bool case_sensitive, bool
forward, bool wrap);
int markTextMatches(const char* string, bool case_sensitive, int
limit);
void SetHighlightTextMatches(bool highlight);
OWB Control API
WebCore::BackForwardList* getBackForwardList();
bool goToBackForwardItem(WebCore::HistoryItem* item);
bool canGoBack();
bool canGoBackOrForward(int steps);
bool CanGoForward();
void goBack();                                         Sample from
void goBackOrForward(int steps);
void goForward();                                       WebView
void stopLoading();
void open(const char* uri);
void reload();
void loadString(const char* content, const char* content_mime_type,
const char* content_encoding, const char* baseUri);
void loadHtmlString(const char* content, const char* base_uri);
bool searchText(const char* string, bool case_sensitive, bool
forward, bool wrap);
int markTextMatches(const char* string, bool case_sensitive, int
limit);
void SetHighlightTextMatches(bool highlight);
OWB Control API
                          goForward


bool WebView::goForward()
{
    return m_page->goForward();
}
OWB Control API
                          goForward


bool WebView::goForward()
{
    return m_page->goForward();
}
OWB Control API
                                     Page::goForward
bool Page::goForward()
{
    HistoryItem* item = m_backForwardList->forwardItem();

    if (item) {
        goToItem(item, FrameLoadTypeForward);
        return true;
    }
    return false;
}
OWB Control API
                                     Page::goForward
bool Page::goForward()
{
    HistoryItem* item = m_backForwardList->forwardItem();

    if (item) {
        goToItem(item, FrameLoadTypeForward);
        return true;
    }
    return false;
}
OWB Control API
                                      Page::goToItem

void Page::goToItem(HistoryItem* item, FrameLoadType type)
{
     // Abort any current load if we're going to a history
item
     m_mainFrame->loader()->stopAllLoaders();
     m_mainFrame->loader()->goToItem(item, type);
}
OWB Control API




                                                                Javascript API       Javascript API




                                                 AddOn engine
                                Optimizations
             WebKit


                                                                   AddOns                 AddOns
                                                                Implementation      Implementation




              WKAL                                                          Private BAL



                                                OWBAL

Graphics   Network    Types                                           ...




                              Middleware, Libs, OS...
OWB Control API




                                                                Javascript API       Javascript API




                                                 AddOn engine
                                Optimizations
             WebKit


                                                                   AddOns                 AddOns
                                                                Implementation      Implementation




              WKAL                                                          Private BAL



                                                OWBAL

Graphics   Network    Types                                           ...




                              Middleware, Libs, OS...
OWBAL

• Generated Abstraction Layer
• Turns Platform directory into a modular,
  independent and self-tested layer
• Fine-grained compilation options
• Self-tested API
OWBAL

• Refactoring of some WebKit files used “as
  is” in OWBAL
• Template skeleton of implementation for
  faster development
Generating OWBAL
•   Intensive use of GCC-XML to cast and identify all
    functions, templates, signatures and moving them
    to the correct slot in OWBAL

•   Separation of interface (skeleton) and
    implementation by modules then platform:

    •   Database
        •   GTK

        •   WX...
Generating OWBAL
 • Generation from GCC-XML of all internal
     data
 • Done by tweaking CMAKE with gcc-xml as
     a compiler
cmake -DCMAKE_C_COMPILER=quot;$OwnGCCquot; -DCMAKE_CXX_COMPILER=quot;$OwnGccquot;
$OWBPATH
make


 • Results in .xml instead of .o with extensive
     description of original sources definition
Generating OWBAL
Widget.h preprocessing:
<Namespace id=quot;_128quot; name=quot;WebCorequot; context=quot;_1quot; members=quot;_526 _527 _528
_529 _530 _531 _532 _533 _540 _541 _545 _550 _551 _555 _556 quot;
mangled=quot;_Z7WebCorequot; demangled=quot;WebCorequot;/>
  <Class id=quot;_541quot; name=quot;Widgetquot; context=quot;_128quot;
mangled=quot;N7WebCore6WidgetEquot; demangled=quot;WebCore::Widgetquot; location=quot;f11:77quot;
file=quot;f11quot; line=quot;77quot; artificial=quot;1quot; size=quot;64quot; align=quot;32quot; members=quot;_717
_718 _719 _720 _721 _722 _723 _724 _725 _726 _727 _728 _729 _730 _731
_732 _733 _734 _735 _736 _737 _738 _739 _740 _741 _742 _743 _744 _745
_746 _747 _748 _749 _750 _751 _752 _753 _754 _755 _756 _757 _758 _759
_760 _761 _762 quot; bases=quot;quot;/>
  <Constructor id=quot;_718quot; name=quot;Widgetquot; explicit=quot;1quot; context=quot;_541quot;
access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetC1Ev *INTERNAL* quot;
demangled=quot;WebCore::Widget::Widget()quot; location=quot;f11:79quot; file=quot;f11quot;
line=quot;79quot; extern=quot;1quot;/>
  <Destructor id=quot;_719quot; name=quot;Widgetquot; virtual=quot;1quot; context=quot;_541quot;
access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetD1Ev *INTERNAL* quot;
demangled=quot;WebCore::Widget::~Widget()quot; location=quot;f11:80quot; file=quot;f11quot;
line=quot;80quot; extern=quot;1quot;>
Generating OWBAL
Widget.h preprocessing:
<Namespace id=quot;_128quot; name=quot;WebCorequot; context=quot;_1quot; members=quot;_526 _527 _528
_529 _530 _531 _532 _533 _540 _541 _545 _550 _551 _555 _556 quot;
mangled=quot;_Z7WebCorequot; demangled=quot;WebCorequot;/>
  <Class id=quot;_541quot; name=quot;Widgetquot; context=quot;_128quot;
mangled=quot;N7WebCore6WidgetEquot; demangled=quot;WebCore::Widgetquot; location=quot;f11:77quot;
file=quot;f11quot; line=quot;77quot; artificial=quot;1quot; size=quot;64quot; align=quot;32quot; members=quot;_717
_718 _719 _720 _721 _722 _723 _724 _725 _726 _727 _728 _729 _730 _731
_732 _733 _734 _735 _736 _737 _738 _739 _740 _741 _742 _743 _744 _745
_746 _747 _748 _749 _750 _751 _752 _753 _754 _755 _756 _757 _758 _759
_760 _761 _762 quot; bases=quot;quot;/>
  <Constructor id=quot;_718quot; name=quot;Widgetquot; explicit=quot;1quot; context=quot;_541quot;
access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetC1Ev *INTERNAL* quot;
demangled=quot;WebCore::Widget::Widget()quot; location=quot;f11:79quot; file=quot;f11quot;
line=quot;79quot; extern=quot;1quot;/>
  <Destructor id=quot;_719quot; name=quot;Widgetquot; virtual=quot;1quot; context=quot;_541quot;
access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetD1Ev *INTERNAL* quot;
demangled=quot;WebCore::Widget::~Widget()quot; location=quot;f11:80quot; file=quot;f11quot;
line=quot;80quot; extern=quot;1quot;>
Generating OWBAL
Widget.h preprocessing:
<Namespace id=quot;_128quot; name=quot;WebCorequot; context=quot;_1quot; members=quot;_526 _527 _528
_529 _530 _531 _532 _533 _540 _541 _545 _550 _551 _555 _556 quot;
mangled=quot;_Z7WebCorequot; demangled=quot;WebCorequot;/>
  <Class id=quot;_541quot; name=quot;Widgetquot; context=quot;_128quot;
mangled=quot;N7WebCore6WidgetEquot; demangled=quot;WebCore::Widgetquot; location=quot;f11:77quot;
file=quot;f11quot; line=quot;77quot; artificial=quot;1quot; size=quot;64quot; align=quot;32quot; members=quot;_717
_718 _719 _720 _721 _722 _723 _724 _725 _726 _727 _728 _729 _730 _731
_732 _733 _734 _735 _736 _737 _738 _739 _740 _741 _742 _743 _744 _745
_746 _747 _748 _749 _750 _751 _752 _753 _754 _755 _756 _757 _758 _759
_760 _761 _762 quot; bases=quot;quot;/>
  <Constructor id=quot;_718quot; name=quot;Widgetquot; explicit=quot;1quot; context=quot;_541quot;
access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetC1Ev *INTERNAL* quot;
demangled=quot;WebCore::Widget::Widget()quot; location=quot;f11:79quot; file=quot;f11quot;
line=quot;79quot; extern=quot;1quot;/>
  <Destructor id=quot;_719quot; name=quot;Widgetquot; virtual=quot;1quot; context=quot;_541quot;
access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetD1Ev *INTERNAL* quot;
demangled=quot;WebCore::Widget::~Widget()quot; location=quot;f11:80quot; file=quot;f11quot;
line=quot;80quot; extern=quot;1quot;>
Generating OWBAL
Widget.h preprocessing:
<Namespace id=quot;_128quot; name=quot;WebCorequot; context=quot;_1quot; members=quot;_526 _527 _528
_529 _530 _531 _532 _533 _540 _541 _545 _550 _551 _555 _556 quot;
mangled=quot;_Z7WebCorequot; demangled=quot;WebCorequot;/>
  <Class id=quot;_541quot; name=quot;Widgetquot; context=quot;_128quot;
mangled=quot;N7WebCore6WidgetEquot; demangled=quot;WebCore::Widgetquot; location=quot;f11:77quot;
file=quot;f11quot; line=quot;77quot; artificial=quot;1quot; size=quot;64quot; align=quot;32quot; members=quot;_717
_718 _719 _720 _721 _722 _723 _724 _725 _726 _727 _728 _729 _730 _731
_732 _733 _734 _735 _736 _737 _738 _739 _740 _741 _742 _743 _744 _745
_746 _747 _748 _749 _750 _751 _752 _753 _754 _755 _756 _757 _758 _759
_760 _761 _762 quot; bases=quot;quot;/>
  <Constructor id=quot;_718quot; name=quot;Widgetquot; explicit=quot;1quot; context=quot;_541quot;
access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetC1Ev *INTERNAL* quot;
demangled=quot;WebCore::Widget::Widget()quot; location=quot;f11:79quot; file=quot;f11quot;
line=quot;79quot; extern=quot;1quot;/>
  <Destructor id=quot;_719quot; name=quot;Widgetquot; virtual=quot;1quot; context=quot;_541quot;
access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetD1Ev *INTERNAL* quot;
demangled=quot;WebCore::Widget::~Widget()quot; location=quot;f11:80quot; file=quot;f11quot;
line=quot;80quot; extern=quot;1quot;>
Generating OWBAL
Widget.h result:
  /**
   * file Widget.h
   * author WebKit project, modified by PLEYO team
   * version svn_32291
   * date 2008-04-24
   */
  /**
   * namespace WKAL
   * brief WebKit part of the BAL
   */
  namespace WKAL{
      /**
       * class Widget
       * brief
       *
       */
      class Widget{
      public:
           /**
            * brief
            */
           Widget();
           /**
            * brief
            */
           ~Widget();
           /**
            * brief
            *
            * param[in] long* someArg :
            * return int :
            */
           int foobar(long* someArg);
      };
  };
Generating OWBAL
Widget.h result:
  /**
   * file Widget.h
   * author WebKit project, modified by PLEYO team
   * version svn_32291
   * date 2008-04-24
   */
  /**
   * namespace WKAL
   * brief WebKit part of the BAL
   */
  namespace WKAL{
      /**
       * class Widget
       * brief
                                        Doxygen-ready
       *
       */
      class Widget{
      public:
           /**
            * brief
            */
           Widget();
           /**
            * brief
            */
           ~Widget();
           /**
            * brief
            *
            * param[in] long* someArg :
            * return int :
            */
           int foobar(long* someArg);
      };
  };
Generating OWBAL
Widget.h result:
  /**
   * file Widget.h
   * author WebKit project, modified by PLEYO team
   * version svn_32291
   * date 2008-04-24
   */
  /**
   * namespace WKAL
   * brief WebKit part of the BAL
   */
  namespace WKAL{
      /**
       * class Widget
       * brief
                                        Doxygen-ready
                                        Fill the blanks !
       *
       */
      class Widget{
      public:
           /**
            * brief
            */
           Widget();
           /**
            * brief
            */
           ~Widget();
           /**
            * brief
            *
            * param[in] long* someArg :
            * return int :
            */
           int foobar(long* someArg);
      };
  };
Generating OWBAL
Platform
  x.h

 x.cpp

GTK/xGTK.cpp
Generating OWBAL
Platform       OWBAL
  x.h                  Skeleton
 x.cpp
                       Concretization
GTK/xGTK.cpp
Generating OWBAL
Platform       OWBAL
               x.h     Skeleton
 x.cpp         x.h     Concretization
GTK/xGTK.cpp
Generating OWBAL
Platform       OWBAL
               x.h
               x.t           Skeleton
 x.cpp         x.h
                WK/BCxWK.h
                             Concretization
GTK/xGTK.cpp
Generating OWBAL
Platform        OWBAL
                x.h
                x.t           Skeleton

                x.h
                 WK/BCxWK.h
                              Concretization
GTK/xGTK.cpp   x.cpp
Generating OWBAL
Platform        OWBAL
                x.h
                x.t            Skeleton

                x.h
                 WK/BCxWK.h
                               Concretization
GTK/xGTK.cpp   x.cpp
                WK/BCxWK.cpp
Generating OWBAL
Platform     OWBAL
             x.h
             x.t            Skeleton

             x.h
              WK/BCxWK.h
                            Concretization
            x.cpp
             WK/BCxWK.cpp


           GTK/xGTK.cpp
Generating OWBAL
Platform     OWBAL
             x.h
             x.t               Skeleton

             x.h
              WK/BCxWK.h
                               Concretization
            x.cpp
             WK/BCxWK.cpp


           GTK/xGTK.cpp
           SDL/BCxSDL.cpp&.h
Generating OWBAL
Concretization of Widget for SDL:
   •   BCWidgetSDL.h
   •   BCWidgetSDL.cpp
/**
 * file BCWidgetSDL.h
 * version svn_32291
 * date 2008-04-24
 */
#ifndef BCWIDGETSDL_H
#define BCWIDGETSDL_H

/**
 * namespace WKAL
 * brief WebKit par of the BAL
 */
namespace WKAL{

      /**

        * class Widget

        * brief This class handles things...

        */

      class Widget{

      public:

      
       /**

      
        * brief Creates a default Widget

      
        */

      
       Widget();

      
       /**

      
        * brief Destruct the Widget and remove links to its parents.

      
        */

      
       ~Widget();

      
       /**

      
        * brief Makes a good foobar

      
        * Takes someArg and play with it to produce the right int we want to return ;)

      
        * param[in] long* someArg : some random number

      
        * return int : a number

      
        */

      
       int foobar(long* someArg);

      };//end of class Widget
};//end of namespace WKAL
//BCWIDGETSDL_H
#endif
/**
 * file BCWidgetSDL.h
 * version svn_32291
 * date 2008-04-24
 */
#ifndef BCWIDGETSDL_H
#define BCWIDGETSDL_H

/**
 * namespace WKAL
 * brief WebKit par of the BAL
 */
namespace WKAL{

      /**

        * class Widget


         * brief This class handles things...
         */
                                                                          BCWidgetSDL.h

      class Widget{

      public:

      
       /**

      
        * brief Creates a default Widget

      
        */

      
       Widget();

      
       /**

      
        * brief Destruct the Widget and remove links to its parents.

      
        */

      
       ~Widget();

      
       /**

      
        * brief Makes a good foobar

      
        * Takes someArg and play with it to produce the right int we want to return ;)

      
        * param[in] long* someArg : some random number

      
        * return int : a number

      
        */

      
       int foobar(long* someArg);

      };//end of class Widget
};//end of namespace WKAL
//BCWIDGETSDL_H
#endif
/**
  * file BCWidgetSDL.cpp
  * version svn_32291
  * date 2008-04-24
  */
#include “BCWidget.h”
namespace WKAL{
Widget::Widget()
{
}
Widget::~Widget()
{
}
int Widget::foobar(long* someArg)
{
}
;
/**
  * file BCWidgetSDL.cpp
  * version svn_32291
  * date 2008-04-24
  */
#include “BCWidget.h”
namespace WKAL{                     BCWidgetSDL.cpp
Widget::Widget()
{
}
Widget::~Widget()
{
}
int Widget::foobar(long* someArg)
{
}
;
Testing OWBAL

• Since OWBAL defines a single level API,
  testing is easier
 • Black box testing of the API
 • White box testing of the implementation
Testing OWBAL
namespace OWBAL {

     class SQLValue {
     public:
         enum Type { NullValue, NumberValue, StringValue };

         SQLValue() : m_type(NullValue) { }
         SQLValue(double number) : m_type(NumberValue), m_number(number) { }
         SQLValue(const String& s) : m_type(StringValue), m_string(s) { }
         SQLValue(const SQLValue&);

         Type type() const { return m_type; }

         String string() const;
         double number() const;

     private:
         Type m_type;
                                                 BCSQLValueSQLite.h
         double m_number;
         String m_string;
     };
};
Testing OWBAL
#ifndef SQLVALUETEST_H
#define SQLVALUETEST_H

#include <cppunit/extensions/HelperMacros.h>
#include quot;SQLValue.hquot;

class SQLValueTest : public CppUnit::TestFixture
{
  CPPUNIT_TEST_SUITE( SQLValueTest );
  CPPUNIT_TEST( testConstructor );
  CPPUNIT_TEST( testConstructorStress );
  CPPUNIT_TEST_SUITE_END();

public:
                                                   SQL Value Unit Test
  void setUp();
  void tearDown();

  void testConstructor();
  void testConstructorStress();
};

#endif   // MONEYTEST_H
Testing OWBAL
void SQLValueTest::testConstructor()
{
// Set up
  // Process
                                                      SQL Value Unit Test:
  SQLValue sqlValue;
  SQLValue sqlValue1(1.2);
  SQLValue sqlValue2(quot;valuequot;);
                                                       testConstructor
  SQLValue sqlValue3(sqlValue1);

    // Check
    CPPUNIT_ASSERT_EQUAL( SQLValue::NullValue, sqlValue.type() );
    CPPUNIT_ASSERT_EQUAL( SQLValue::NumberValue, sqlValue1.type() );
    CPPUNIT_ASSERT_EQUAL( SQLValue::StringValue, sqlValue2.type() );
    CPPUNIT_ASSERT_EQUAL( SQLValue::NumberValue, sqlValue3.type() );
    CPPUNIT_ASSERT_EQUAL( 1.2, sqlValue1.number() );
    CPPUNIT_ASSERT( quot;valuequot; == sqlValue2.string() );
    CPPUNIT_ASSERT_EQUAL( 1.2, sqlValue3.number() );
}
Testing OWBAL
void SQLValueTest::testConstructorStress()
{
  // Set up

    // Process &   Check
    for(int i=0;   i<1000; i++) {
        SQLValue   *sqlValue = new SQLValue();
        SQLValue   *sqlValue1 = new SQLValue(1.2);
        SQLValue   *sqlValue2 = new SQLValue(quot;valuequot;);
        SQLValue   *sqlValue3 = new SQLValue(*sqlValue1);

        delete   sqlValue;
        delete   sqlValue1;


    }
        delete
        delete
                 sqlValue2;
                 sqlValue3;                            SQL Value Unit Test:
}
    //Check                                          testConstructor Stress
OWBAL Compilation

• Fine-grained compilation options
 • Leverages CMake power
 • Cut any single WebKit feature (JS, SVG, ...)
 • Choose underlying library, switch from an
    implementation to another
OWBAL Compilation



Disable JavascriptCore
OWBAL Compilation



Compile using μcLibC
OWBAL Compilation



Toggle XML Parser
OWBAL Compilation
Toggle Font Engine
OWBAL Compilation

Toggle Internationalization support
OWBAL Compilation

Toggle Image Decoder Libs
Metrics on ST 7109 ref design
             Options ­DMOBILE=1                ­DMOBILE=0                ­DMOBILE=0                ­DMOBILE=1
                     ­DLOW_BANDWIDTH_DISPLAY=0 ­DLOW_BANDWIDTH_DISPLAY=0 ­DLOW_BANDWIDTH_DISPLAY=1 ­DLOW_BANDWIDTH_DISPLAY=1



WebSite
google.fr:
best                 1.220                    1.294                     1.189                     1.197
worst                1.871                    1.915                     1.681                     1.563
average              1.6                      1.5                       1.4                       1.3 (static: 1.0)


maps.google.fr:
best                 13.34                    13.372                    13.335                    13.526
worst                13.80                    14.572                    13.795                    14.354
average              13.5                     13.6                      13.5                      13.6


lemonde.fr:
best                 18.96                    17.776                    18.940                    24.113
worst                23.70                    79.140                    76.909                    27.617
average              21.8                     46.5                      36.5                      26.2 (static: 17.2)


deviantart.com:
best                 10.45                    11.167                    10.849                    10.861
worst                10.84                    11.601                    11.934                    12.879
average              10.7                     11.5                      11.3                      11.2 (static: 8.7)


fr.yahoo.com:
best                 9.10                     8.415                     8.400                     9.602
worst                9.99                     8.940                     8.605                     10.963
average              9.4                      8.7                       8.6                       9.8 (static: 6.5)


gentoo.org:
best                 1.44                     1.863                     1.299                     1.485
worst                2.87                     4.908                     4.307                     2.561
average              1.9                      2.5                       2.4                       1.9 (static: 1.0)




                             Note that static links increase performances by 20%
Leveraging WebKit


• Clean and simple extension mechanism
• Leverage Device capabilities
Leveraging WebKit

• Adopted by CEM / ODM
• AmigaOS Official Web Browser
• Ported on QNX, Windows Mobile, OS 21,
  Nucleus, Many Embedded Linux flavors...
Leveraging WebKit

• Presentation extension:
 • Optimizes layout rendering with ad-hoc
    rules
 • Leverages specific capabilities with JS or
    HTML extensions
Origyn Suite
• If you have a QVGA screen
 • It’s not worth downloading a 2048*1025
    px picture
 • Ask your RAM to store it
 • Ask your CPU to resize it
 • Display a 200*100 picture...
Origyn Suite




On the fly image shrinking and conversion
Origyn Suite


      Use any look and feel
Origyn Suite




Leverage device capabilities
Origyn Suite




Leverage device capabilities
Some Screenshots...
Linux SDL, FreeType fonts
Linux SDL, Embedded Fonts
Linux GTK
MacOS with MacPort libs
   and GTK graphics
AmigaOS with GUI
AmigaOS with GUI
 and bookmarks
AmigaOS port
passes ACID2 test
OWB
 v3
OWB
 v3
OWB
   v3




Available
OWB
              v3




          Today
http://www.sand-labs.org/svn/
Get involved!

http://www.sand-labs.org/owb
Thank you
Questions?

Contenu connexe

Tendances

GR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug inGR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug inGR8Conf
 
Benefits of OSGi in Practise
Benefits of OSGi in PractiseBenefits of OSGi in Practise
Benefits of OSGi in PractiseDavid Bosschaert
 
GR8Conf 2009: Groovy in Fiance Case Study by Jonathan Felch
GR8Conf 2009: Groovy in Fiance Case Study by Jonathan FelchGR8Conf 2009: Groovy in Fiance Case Study by Jonathan Felch
GR8Conf 2009: Groovy in Fiance Case Study by Jonathan FelchGR8Conf
 
Command Line Tool in swift
Command Line Tool in swiftCommand Line Tool in swift
Command Line Tool in swiftYusuke Kita
 
GR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf
 
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012Alexandre Morgaut
 
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application DevelopmentOSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application DevelopmentSanjeeb Sahoo
 
Micronaut: Changing the Micro Future
Micronaut: Changing the Micro FutureMicronaut: Changing the Micro Future
Micronaut: Changing the Micro FutureZachary Klein
 
Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGiIlya Rybak
 
JavaFX and HTML5 - Like Curds and Rice
JavaFX and HTML5 - Like Curds and RiceJavaFX and HTML5 - Like Curds and Rice
JavaFX and HTML5 - Like Curds and RiceStephen Chin
 
OSGi and Java EE in GlassFish - Tech Days 2010 India
OSGi and Java EE in GlassFish - Tech Days 2010 IndiaOSGi and Java EE in GlassFish - Tech Days 2010 India
OSGi and Java EE in GlassFish - Tech Days 2010 IndiaArun Gupta
 

Tendances (18)

Scala & Lift (JEEConf 2012)
Scala & Lift (JEEConf 2012)Scala & Lift (JEEConf 2012)
Scala & Lift (JEEConf 2012)
 
GR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug inGR8Conf 2011: Grails, how to plug in
GR8Conf 2011: Grails, how to plug in
 
Java 9 Modularity in Action
Java 9 Modularity in ActionJava 9 Modularity in Action
Java 9 Modularity in Action
 
Benefits of OSGi in Practise
Benefits of OSGi in PractiseBenefits of OSGi in Practise
Benefits of OSGi in Practise
 
GR8Conf 2009: Groovy in Fiance Case Study by Jonathan Felch
GR8Conf 2009: Groovy in Fiance Case Study by Jonathan FelchGR8Conf 2009: Groovy in Fiance Case Study by Jonathan Felch
GR8Conf 2009: Groovy in Fiance Case Study by Jonathan Felch
 
Command Line Tool in swift
Command Line Tool in swiftCommand Line Tool in swift
Command Line Tool in swift
 
Desiging for Modularity with Java 9
Desiging for Modularity with Java 9Desiging for Modularity with Java 9
Desiging for Modularity with Java 9
 
GR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting Grails
 
Liferay (DXP) 7 Tech Meetup for Developers
Liferay (DXP) 7 Tech Meetup for DevelopersLiferay (DXP) 7 Tech Meetup for Developers
Liferay (DXP) 7 Tech Meetup for Developers
 
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
 
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application DevelopmentOSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
 
Micronaut: Changing the Micro Future
Micronaut: Changing the Micro FutureMicronaut: Changing the Micro Future
Micronaut: Changing the Micro Future
 
Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGi
 
Java modularization
Java modularizationJava modularization
Java modularization
 
JavaFX and HTML5 - Like Curds and Rice
JavaFX and HTML5 - Like Curds and RiceJavaFX and HTML5 - Like Curds and Rice
JavaFX and HTML5 - Like Curds and Rice
 
Karaf ee-apachecon eu-2012
Karaf ee-apachecon eu-2012Karaf ee-apachecon eu-2012
Karaf ee-apachecon eu-2012
 
OSGi and Java EE in GlassFish - Tech Days 2010 India
OSGi and Java EE in GlassFish - Tech Days 2010 IndiaOSGi and Java EE in GlassFish - Tech Days 2010 India
OSGi and Java EE in GlassFish - Tech Days 2010 India
 
Modular JavaScript
Modular JavaScriptModular JavaScript
Modular JavaScript
 

En vedette

alimentos
alimentosalimentos
alimentoskampi79
 
Wilson Electric Company History
Wilson Electric Company HistoryWilson Electric Company History
Wilson Electric Company HistoryCarlosChag
 
Orden De Ganadores Del Primer Concurso De PeñAs Marianistas
Orden De Ganadores Del Primer Concurso De PeñAs MarianistasOrden De Ganadores Del Primer Concurso De PeñAs Marianistas
Orden De Ganadores Del Primer Concurso De PeñAs Marianistasalmenar
 
DEDUCCIONES FISCALES I+D+i
DEDUCCIONES FISCALES I+D+iDEDUCCIONES FISCALES I+D+i
DEDUCCIONES FISCALES I+D+iguest46b74
 

En vedette (6)

alimentos
alimentosalimentos
alimentos
 
Wilson Electric Company History
Wilson Electric Company HistoryWilson Electric Company History
Wilson Electric Company History
 
Cyberwearz
CyberwearzCyberwearz
Cyberwearz
 
Orden De Ganadores Del Primer Concurso De PeñAs Marianistas
Orden De Ganadores Del Primer Concurso De PeñAs MarianistasOrden De Ganadores Del Primer Concurso De PeñAs Marianistas
Orden De Ganadores Del Primer Concurso De PeñAs Marianistas
 
DEDUCCIONES FISCALES I+D+i
DEDUCCIONES FISCALES I+D+iDEDUCCIONES FISCALES I+D+i
DEDUCCIONES FISCALES I+D+i
 
Zovem Se.....
Zovem Se.....Zovem Se.....
Zovem Se.....
 

Similaire à Origyn Web Browser 2008 (Rmll)

Nokia Web-Runtime Presentation (Phong Vu)
Nokia Web-Runtime Presentation (Phong Vu)Nokia Web-Runtime Presentation (Phong Vu)
Nokia Web-Runtime Presentation (Phong Vu)Daniel Appelquist
 
S60 3rd FP2 Widgets
S60 3rd FP2 WidgetsS60 3rd FP2 Widgets
S60 3rd FP2 Widgetsromek
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitAriya Hidayat
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitAriya Hidayat
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitAriya Hidayat
 
Baking Stash in the AWS Cloud at Netflix
Baking Stash in the AWS Cloud at NetflixBaking Stash in the AWS Cloud at Netflix
Baking Stash in the AWS Cloud at NetflixAtlassian
 
Developments in the Qt WebKit Integration
Developments in the Qt WebKit IntegrationDevelopments in the Qt WebKit Integration
Developments in the Qt WebKit Integrationaccount inactive
 
API Virtualization: Mocking on Steroids
API Virtualization: Mocking on SteroidsAPI Virtualization: Mocking on Steroids
API Virtualization: Mocking on SteroidsSmartBear
 
Mutating Admission Webhook creation
Mutating Admission Webhook creationMutating Admission Webhook creation
Mutating Admission Webhook creationVictor Morales
 
Devoxx 2018 - Pivotal and AxonIQ - Quickstart your event driven architecture
Devoxx 2018 -  Pivotal and AxonIQ - Quickstart your event driven architectureDevoxx 2018 -  Pivotal and AxonIQ - Quickstart your event driven architecture
Devoxx 2018 - Pivotal and AxonIQ - Quickstart your event driven architectureBen Wilcock
 
Building Papers
Building PapersBuilding Papers
Building PapersMahmoud
 
VASmalltalk, Today and Tomorrow
VASmalltalk, Today and TomorrowVASmalltalk, Today and Tomorrow
VASmalltalk, Today and TomorrowESUG
 
WebSphere Portal Technical Overview
WebSphere Portal Technical OverviewWebSphere Portal Technical Overview
WebSphere Portal Technical OverviewVincent Perrin
 
Mastering Kubernetes on AWS (CON301-R1) - AWS re:Invent 2018
Mastering Kubernetes on AWS (CON301-R1) - AWS re:Invent 2018Mastering Kubernetes on AWS (CON301-R1) - AWS re:Invent 2018
Mastering Kubernetes on AWS (CON301-R1) - AWS re:Invent 2018Amazon Web Services
 
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...jaxconf
 
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...Lucas Jellema
 

Similaire à Origyn Web Browser 2008 (Rmll) (20)

Nokia Web-Runtime Presentation (Phong Vu)
Nokia Web-Runtime Presentation (Phong Vu)Nokia Web-Runtime Presentation (Phong Vu)
Nokia Web-Runtime Presentation (Phong Vu)
 
S60 3rd FP2 Widgets
S60 3rd FP2 WidgetsS60 3rd FP2 Widgets
S60 3rd FP2 Widgets
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
 
Guides To Analyzing WebKit Performance
Guides To Analyzing WebKit PerformanceGuides To Analyzing WebKit Performance
Guides To Analyzing WebKit Performance
 
Baking Stash in the AWS Cloud at Netflix
Baking Stash in the AWS Cloud at NetflixBaking Stash in the AWS Cloud at Netflix
Baking Stash in the AWS Cloud at Netflix
 
Unit Testing 101
Unit Testing 101Unit Testing 101
Unit Testing 101
 
Developments in the Qt WebKit Integration
Developments in the Qt WebKit IntegrationDevelopments in the Qt WebKit Integration
Developments in the Qt WebKit Integration
 
API Virtualization: Mocking on Steroids
API Virtualization: Mocking on SteroidsAPI Virtualization: Mocking on Steroids
API Virtualization: Mocking on Steroids
 
Mutating Admission Webhook creation
Mutating Admission Webhook creationMutating Admission Webhook creation
Mutating Admission Webhook creation
 
Devoxx 2018 - Pivotal and AxonIQ - Quickstart your event driven architecture
Devoxx 2018 -  Pivotal and AxonIQ - Quickstart your event driven architectureDevoxx 2018 -  Pivotal and AxonIQ - Quickstart your event driven architecture
Devoxx 2018 - Pivotal and AxonIQ - Quickstart your event driven architecture
 
Building Papers
Building PapersBuilding Papers
Building Papers
 
VASmalltalk, Today and Tomorrow
VASmalltalk, Today and TomorrowVASmalltalk, Today and Tomorrow
VASmalltalk, Today and Tomorrow
 
WebSphere Portal Technical Overview
WebSphere Portal Technical OverviewWebSphere Portal Technical Overview
WebSphere Portal Technical Overview
 
Mastering Kubernetes on AWS (CON301-R1) - AWS re:Invent 2018
Mastering Kubernetes on AWS (CON301-R1) - AWS re:Invent 2018Mastering Kubernetes on AWS (CON301-R1) - AWS re:Invent 2018
Mastering Kubernetes on AWS (CON301-R1) - AWS re:Invent 2018
 
The WebKit project
The WebKit projectThe WebKit project
The WebKit project
 
WebLogic and GraalVM
WebLogic and GraalVMWebLogic and GraalVM
WebLogic and GraalVM
 
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
 
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
 

Dernier

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 

Dernier (20)

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 

Origyn Web Browser 2008 (Rmll)

  • 2. Position • Browser fragmentation • WebKit derivative • Leveraging WebKit for CE
  • 3. Browser Fragmentation • Wide range of offering in the Browser’s space for Desktop • Differents in Embedded constraints
  • 4. Browser Fragmentation • NetFront • OpenWave • Opera Royalty-based, Proprietary
  • 5. Browser Fragmentation • Firefox, Fennec: not ready for the game • WebKit • Pleyo has been pushing WebKit for embedded systems since 2006 • iPhone and Nokia S60 Series proved this choice to be sharp • LiMo, Android Adoption
  • 6. Paving the way to broader WebKit adoption • WebKit for iPhone: specific MobileSafari proprietary code • WebKit for S60: months of refactoring engineering. Project is dead-born...And dead • Almost definitively forked from WebKit trunk because of this huge refactory
  • 7. Paving the way to broader WebKit adoption • Offer a simple way to port WebKit • Saves the client from WebKit update concern • Leverage code reuse from a port to another
  • 10. OWB • OWBAL Abstraction Layer: simplify WebKit port • Extensive and automated testing • Warrant of a clean WebKit Port • Respects Device & System limitations
  • 11. OWB • Library-dependent instead of Platform- dependent • Freedom of choice : a feature set associated to libraries should or shouldn’t be integrated
  • 12. OWB Control API Javascript API Javascript API AddOn engine Optimizations WebKit AddOns AddOns Implementation Implementation WKAL Private BAL OWBAL Graphics Network Types ... Middleware, Libs, OS...
  • 13. OWB Control API Javascript API Javascript API AddOn engine Optimizations WebKit AddOns AddOns Objects connected Implementation Implementation to WebKit WKAL Private BAL OWBAL Graphics Network Types ... Middleware, Libs, OS...
  • 14. OWB Control API Javascript API Javascript API AddOn engine Optimizations WebKit AddOns AddOns Implementation Implementation WKAL Private BAL Technical Classes for OWBAL WebKit or others Graphics Network Types ... Middleware, Libs, OS...
  • 15. OWB Control API • Inspired by Win32 WebKit • Configuration Management • URL Management (Stop, Reload, Back, ...) • History Management • Seamless Integration with foreign apps • WebView management • Platform specific features: Clipboard, Download...
  • 16. OWB Control API WebCore::BackForwardList* getBackForwardList(); bool goToBackForwardItem(WebCore::HistoryItem* item); bool canGoBack(); bool canGoBackOrForward(int steps); bool CanGoForward(); void goBack(); Sample from void goBackOrForward(int steps); void goForward(); WebView void stopLoading(); void open(const char* uri); void reload(); void loadString(const char* content, const char* content_mime_type, const char* content_encoding, const char* baseUri); void loadHtmlString(const char* content, const char* base_uri); bool searchText(const char* string, bool case_sensitive, bool forward, bool wrap); int markTextMatches(const char* string, bool case_sensitive, int limit); void SetHighlightTextMatches(bool highlight);
  • 17. OWB Control API WebCore::BackForwardList* getBackForwardList(); bool goToBackForwardItem(WebCore::HistoryItem* item); bool canGoBack(); bool canGoBackOrForward(int steps); bool CanGoForward(); void goBack(); Sample from void goBackOrForward(int steps); void goForward(); WebView void stopLoading(); void open(const char* uri); void reload(); void loadString(const char* content, const char* content_mime_type, const char* content_encoding, const char* baseUri); void loadHtmlString(const char* content, const char* base_uri); bool searchText(const char* string, bool case_sensitive, bool forward, bool wrap); int markTextMatches(const char* string, bool case_sensitive, int limit); void SetHighlightTextMatches(bool highlight);
  • 18. OWB Control API goForward bool WebView::goForward() {     return m_page->goForward(); }
  • 19. OWB Control API goForward bool WebView::goForward() {     return m_page->goForward(); }
  • 20. OWB Control API Page::goForward bool Page::goForward() { HistoryItem* item = m_backForwardList->forwardItem(); if (item) { goToItem(item, FrameLoadTypeForward); return true; } return false; }
  • 21. OWB Control API Page::goForward bool Page::goForward() { HistoryItem* item = m_backForwardList->forwardItem(); if (item) { goToItem(item, FrameLoadTypeForward); return true; } return false; }
  • 22. OWB Control API Page::goToItem void Page::goToItem(HistoryItem* item, FrameLoadType type) { // Abort any current load if we're going to a history item m_mainFrame->loader()->stopAllLoaders(); m_mainFrame->loader()->goToItem(item, type); }
  • 23. OWB Control API Javascript API Javascript API AddOn engine Optimizations WebKit AddOns AddOns Implementation Implementation WKAL Private BAL OWBAL Graphics Network Types ... Middleware, Libs, OS...
  • 24. OWB Control API Javascript API Javascript API AddOn engine Optimizations WebKit AddOns AddOns Implementation Implementation WKAL Private BAL OWBAL Graphics Network Types ... Middleware, Libs, OS...
  • 25. OWBAL • Generated Abstraction Layer • Turns Platform directory into a modular, independent and self-tested layer • Fine-grained compilation options • Self-tested API
  • 26. OWBAL • Refactoring of some WebKit files used “as is” in OWBAL • Template skeleton of implementation for faster development
  • 27. Generating OWBAL • Intensive use of GCC-XML to cast and identify all functions, templates, signatures and moving them to the correct slot in OWBAL • Separation of interface (skeleton) and implementation by modules then platform: • Database • GTK • WX...
  • 28. Generating OWBAL • Generation from GCC-XML of all internal data • Done by tweaking CMAKE with gcc-xml as a compiler cmake -DCMAKE_C_COMPILER=quot;$OwnGCCquot; -DCMAKE_CXX_COMPILER=quot;$OwnGccquot; $OWBPATH make • Results in .xml instead of .o with extensive description of original sources definition
  • 29. Generating OWBAL Widget.h preprocessing: <Namespace id=quot;_128quot; name=quot;WebCorequot; context=quot;_1quot; members=quot;_526 _527 _528 _529 _530 _531 _532 _533 _540 _541 _545 _550 _551 _555 _556 quot; mangled=quot;_Z7WebCorequot; demangled=quot;WebCorequot;/> <Class id=quot;_541quot; name=quot;Widgetquot; context=quot;_128quot; mangled=quot;N7WebCore6WidgetEquot; demangled=quot;WebCore::Widgetquot; location=quot;f11:77quot; file=quot;f11quot; line=quot;77quot; artificial=quot;1quot; size=quot;64quot; align=quot;32quot; members=quot;_717 _718 _719 _720 _721 _722 _723 _724 _725 _726 _727 _728 _729 _730 _731 _732 _733 _734 _735 _736 _737 _738 _739 _740 _741 _742 _743 _744 _745 _746 _747 _748 _749 _750 _751 _752 _753 _754 _755 _756 _757 _758 _759 _760 _761 _762 quot; bases=quot;quot;/> <Constructor id=quot;_718quot; name=quot;Widgetquot; explicit=quot;1quot; context=quot;_541quot; access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetC1Ev *INTERNAL* quot; demangled=quot;WebCore::Widget::Widget()quot; location=quot;f11:79quot; file=quot;f11quot; line=quot;79quot; extern=quot;1quot;/> <Destructor id=quot;_719quot; name=quot;Widgetquot; virtual=quot;1quot; context=quot;_541quot; access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetD1Ev *INTERNAL* quot; demangled=quot;WebCore::Widget::~Widget()quot; location=quot;f11:80quot; file=quot;f11quot; line=quot;80quot; extern=quot;1quot;>
  • 30. Generating OWBAL Widget.h preprocessing: <Namespace id=quot;_128quot; name=quot;WebCorequot; context=quot;_1quot; members=quot;_526 _527 _528 _529 _530 _531 _532 _533 _540 _541 _545 _550 _551 _555 _556 quot; mangled=quot;_Z7WebCorequot; demangled=quot;WebCorequot;/> <Class id=quot;_541quot; name=quot;Widgetquot; context=quot;_128quot; mangled=quot;N7WebCore6WidgetEquot; demangled=quot;WebCore::Widgetquot; location=quot;f11:77quot; file=quot;f11quot; line=quot;77quot; artificial=quot;1quot; size=quot;64quot; align=quot;32quot; members=quot;_717 _718 _719 _720 _721 _722 _723 _724 _725 _726 _727 _728 _729 _730 _731 _732 _733 _734 _735 _736 _737 _738 _739 _740 _741 _742 _743 _744 _745 _746 _747 _748 _749 _750 _751 _752 _753 _754 _755 _756 _757 _758 _759 _760 _761 _762 quot; bases=quot;quot;/> <Constructor id=quot;_718quot; name=quot;Widgetquot; explicit=quot;1quot; context=quot;_541quot; access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetC1Ev *INTERNAL* quot; demangled=quot;WebCore::Widget::Widget()quot; location=quot;f11:79quot; file=quot;f11quot; line=quot;79quot; extern=quot;1quot;/> <Destructor id=quot;_719quot; name=quot;Widgetquot; virtual=quot;1quot; context=quot;_541quot; access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetD1Ev *INTERNAL* quot; demangled=quot;WebCore::Widget::~Widget()quot; location=quot;f11:80quot; file=quot;f11quot; line=quot;80quot; extern=quot;1quot;>
  • 31. Generating OWBAL Widget.h preprocessing: <Namespace id=quot;_128quot; name=quot;WebCorequot; context=quot;_1quot; members=quot;_526 _527 _528 _529 _530 _531 _532 _533 _540 _541 _545 _550 _551 _555 _556 quot; mangled=quot;_Z7WebCorequot; demangled=quot;WebCorequot;/> <Class id=quot;_541quot; name=quot;Widgetquot; context=quot;_128quot; mangled=quot;N7WebCore6WidgetEquot; demangled=quot;WebCore::Widgetquot; location=quot;f11:77quot; file=quot;f11quot; line=quot;77quot; artificial=quot;1quot; size=quot;64quot; align=quot;32quot; members=quot;_717 _718 _719 _720 _721 _722 _723 _724 _725 _726 _727 _728 _729 _730 _731 _732 _733 _734 _735 _736 _737 _738 _739 _740 _741 _742 _743 _744 _745 _746 _747 _748 _749 _750 _751 _752 _753 _754 _755 _756 _757 _758 _759 _760 _761 _762 quot; bases=quot;quot;/> <Constructor id=quot;_718quot; name=quot;Widgetquot; explicit=quot;1quot; context=quot;_541quot; access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetC1Ev *INTERNAL* quot; demangled=quot;WebCore::Widget::Widget()quot; location=quot;f11:79quot; file=quot;f11quot; line=quot;79quot; extern=quot;1quot;/> <Destructor id=quot;_719quot; name=quot;Widgetquot; virtual=quot;1quot; context=quot;_541quot; access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetD1Ev *INTERNAL* quot; demangled=quot;WebCore::Widget::~Widget()quot; location=quot;f11:80quot; file=quot;f11quot; line=quot;80quot; extern=quot;1quot;>
  • 32. Generating OWBAL Widget.h preprocessing: <Namespace id=quot;_128quot; name=quot;WebCorequot; context=quot;_1quot; members=quot;_526 _527 _528 _529 _530 _531 _532 _533 _540 _541 _545 _550 _551 _555 _556 quot; mangled=quot;_Z7WebCorequot; demangled=quot;WebCorequot;/> <Class id=quot;_541quot; name=quot;Widgetquot; context=quot;_128quot; mangled=quot;N7WebCore6WidgetEquot; demangled=quot;WebCore::Widgetquot; location=quot;f11:77quot; file=quot;f11quot; line=quot;77quot; artificial=quot;1quot; size=quot;64quot; align=quot;32quot; members=quot;_717 _718 _719 _720 _721 _722 _723 _724 _725 _726 _727 _728 _729 _730 _731 _732 _733 _734 _735 _736 _737 _738 _739 _740 _741 _742 _743 _744 _745 _746 _747 _748 _749 _750 _751 _752 _753 _754 _755 _756 _757 _758 _759 _760 _761 _762 quot; bases=quot;quot;/> <Constructor id=quot;_718quot; name=quot;Widgetquot; explicit=quot;1quot; context=quot;_541quot; access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetC1Ev *INTERNAL* quot; demangled=quot;WebCore::Widget::Widget()quot; location=quot;f11:79quot; file=quot;f11quot; line=quot;79quot; extern=quot;1quot;/> <Destructor id=quot;_719quot; name=quot;Widgetquot; virtual=quot;1quot; context=quot;_541quot; access=quot;publicquot; mangled=quot;_ZN7WebCore6WidgetD1Ev *INTERNAL* quot; demangled=quot;WebCore::Widget::~Widget()quot; location=quot;f11:80quot; file=quot;f11quot; line=quot;80quot; extern=quot;1quot;>
  • 33. Generating OWBAL Widget.h result: /** * file Widget.h * author WebKit project, modified by PLEYO team * version svn_32291 * date 2008-04-24 */ /** * namespace WKAL * brief WebKit part of the BAL */ namespace WKAL{ /** * class Widget * brief * */ class Widget{ public: /** * brief */ Widget(); /** * brief */ ~Widget(); /** * brief * * param[in] long* someArg : * return int : */ int foobar(long* someArg); }; };
  • 34. Generating OWBAL Widget.h result: /** * file Widget.h * author WebKit project, modified by PLEYO team * version svn_32291 * date 2008-04-24 */ /** * namespace WKAL * brief WebKit part of the BAL */ namespace WKAL{ /** * class Widget * brief Doxygen-ready * */ class Widget{ public: /** * brief */ Widget(); /** * brief */ ~Widget(); /** * brief * * param[in] long* someArg : * return int : */ int foobar(long* someArg); }; };
  • 35. Generating OWBAL Widget.h result: /** * file Widget.h * author WebKit project, modified by PLEYO team * version svn_32291 * date 2008-04-24 */ /** * namespace WKAL * brief WebKit part of the BAL */ namespace WKAL{ /** * class Widget * brief Doxygen-ready Fill the blanks ! * */ class Widget{ public: /** * brief */ Widget(); /** * brief */ ~Widget(); /** * brief * * param[in] long* someArg : * return int : */ int foobar(long* someArg); }; };
  • 36. Generating OWBAL Platform x.h x.cpp GTK/xGTK.cpp
  • 37. Generating OWBAL Platform OWBAL x.h Skeleton x.cpp Concretization GTK/xGTK.cpp
  • 38. Generating OWBAL Platform OWBAL x.h Skeleton x.cpp x.h Concretization GTK/xGTK.cpp
  • 39. Generating OWBAL Platform OWBAL x.h x.t Skeleton x.cpp x.h WK/BCxWK.h Concretization GTK/xGTK.cpp
  • 40. Generating OWBAL Platform OWBAL x.h x.t Skeleton x.h WK/BCxWK.h Concretization GTK/xGTK.cpp x.cpp
  • 41. Generating OWBAL Platform OWBAL x.h x.t Skeleton x.h WK/BCxWK.h Concretization GTK/xGTK.cpp x.cpp WK/BCxWK.cpp
  • 42. Generating OWBAL Platform OWBAL x.h x.t Skeleton x.h WK/BCxWK.h Concretization x.cpp WK/BCxWK.cpp GTK/xGTK.cpp
  • 43. Generating OWBAL Platform OWBAL x.h x.t Skeleton x.h WK/BCxWK.h Concretization x.cpp WK/BCxWK.cpp GTK/xGTK.cpp SDL/BCxSDL.cpp&.h
  • 44. Generating OWBAL Concretization of Widget for SDL: • BCWidgetSDL.h • BCWidgetSDL.cpp
  • 45. /** * file BCWidgetSDL.h * version svn_32291 * date 2008-04-24 */ #ifndef BCWIDGETSDL_H #define BCWIDGETSDL_H /** * namespace WKAL * brief WebKit par of the BAL */ namespace WKAL{ /** * class Widget * brief This class handles things... */ class Widget{ public: /** * brief Creates a default Widget */ Widget(); /** * brief Destruct the Widget and remove links to its parents. */ ~Widget(); /** * brief Makes a good foobar * Takes someArg and play with it to produce the right int we want to return ;) * param[in] long* someArg : some random number * return int : a number */ int foobar(long* someArg); };//end of class Widget };//end of namespace WKAL //BCWIDGETSDL_H #endif
  • 46. /** * file BCWidgetSDL.h * version svn_32291 * date 2008-04-24 */ #ifndef BCWIDGETSDL_H #define BCWIDGETSDL_H /** * namespace WKAL * brief WebKit par of the BAL */ namespace WKAL{ /** * class Widget * brief This class handles things... */ BCWidgetSDL.h class Widget{ public: /** * brief Creates a default Widget */ Widget(); /** * brief Destruct the Widget and remove links to its parents. */ ~Widget(); /** * brief Makes a good foobar * Takes someArg and play with it to produce the right int we want to return ;) * param[in] long* someArg : some random number * return int : a number */ int foobar(long* someArg); };//end of class Widget };//end of namespace WKAL //BCWIDGETSDL_H #endif
  • 47. /** * file BCWidgetSDL.cpp * version svn_32291 * date 2008-04-24 */ #include “BCWidget.h” namespace WKAL{ Widget::Widget() { } Widget::~Widget() { } int Widget::foobar(long* someArg) { } ;
  • 48. /** * file BCWidgetSDL.cpp * version svn_32291 * date 2008-04-24 */ #include “BCWidget.h” namespace WKAL{ BCWidgetSDL.cpp Widget::Widget() { } Widget::~Widget() { } int Widget::foobar(long* someArg) { } ;
  • 49. Testing OWBAL • Since OWBAL defines a single level API, testing is easier • Black box testing of the API • White box testing of the implementation
  • 50. Testing OWBAL namespace OWBAL { class SQLValue { public: enum Type { NullValue, NumberValue, StringValue }; SQLValue() : m_type(NullValue) { } SQLValue(double number) : m_type(NumberValue), m_number(number) { } SQLValue(const String& s) : m_type(StringValue), m_string(s) { } SQLValue(const SQLValue&); Type type() const { return m_type; } String string() const; double number() const; private: Type m_type; BCSQLValueSQLite.h double m_number; String m_string; }; };
  • 51. Testing OWBAL #ifndef SQLVALUETEST_H #define SQLVALUETEST_H #include <cppunit/extensions/HelperMacros.h> #include quot;SQLValue.hquot; class SQLValueTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( SQLValueTest ); CPPUNIT_TEST( testConstructor ); CPPUNIT_TEST( testConstructorStress ); CPPUNIT_TEST_SUITE_END(); public: SQL Value Unit Test void setUp(); void tearDown(); void testConstructor(); void testConstructorStress(); }; #endif // MONEYTEST_H
  • 52. Testing OWBAL void SQLValueTest::testConstructor() { // Set up // Process SQL Value Unit Test: SQLValue sqlValue; SQLValue sqlValue1(1.2); SQLValue sqlValue2(quot;valuequot;); testConstructor SQLValue sqlValue3(sqlValue1); // Check CPPUNIT_ASSERT_EQUAL( SQLValue::NullValue, sqlValue.type() ); CPPUNIT_ASSERT_EQUAL( SQLValue::NumberValue, sqlValue1.type() ); CPPUNIT_ASSERT_EQUAL( SQLValue::StringValue, sqlValue2.type() ); CPPUNIT_ASSERT_EQUAL( SQLValue::NumberValue, sqlValue3.type() ); CPPUNIT_ASSERT_EQUAL( 1.2, sqlValue1.number() ); CPPUNIT_ASSERT( quot;valuequot; == sqlValue2.string() ); CPPUNIT_ASSERT_EQUAL( 1.2, sqlValue3.number() ); }
  • 53. Testing OWBAL void SQLValueTest::testConstructorStress() { // Set up // Process & Check for(int i=0; i<1000; i++) { SQLValue *sqlValue = new SQLValue(); SQLValue *sqlValue1 = new SQLValue(1.2); SQLValue *sqlValue2 = new SQLValue(quot;valuequot;); SQLValue *sqlValue3 = new SQLValue(*sqlValue1); delete sqlValue; delete sqlValue1; } delete delete sqlValue2; sqlValue3; SQL Value Unit Test: } //Check testConstructor Stress
  • 54. OWBAL Compilation • Fine-grained compilation options • Leverages CMake power • Cut any single WebKit feature (JS, SVG, ...) • Choose underlying library, switch from an implementation to another
  • 61. Metrics on ST 7109 ref design Options ­DMOBILE=1 ­DMOBILE=0 ­DMOBILE=0 ­DMOBILE=1 ­DLOW_BANDWIDTH_DISPLAY=0 ­DLOW_BANDWIDTH_DISPLAY=0 ­DLOW_BANDWIDTH_DISPLAY=1 ­DLOW_BANDWIDTH_DISPLAY=1 WebSite google.fr: best 1.220 1.294 1.189 1.197 worst 1.871 1.915 1.681 1.563 average 1.6 1.5 1.4 1.3 (static: 1.0) maps.google.fr: best 13.34 13.372 13.335 13.526 worst 13.80 14.572 13.795 14.354 average 13.5 13.6 13.5 13.6 lemonde.fr: best 18.96 17.776 18.940 24.113 worst 23.70 79.140 76.909 27.617 average 21.8 46.5 36.5 26.2 (static: 17.2) deviantart.com: best 10.45 11.167 10.849 10.861 worst 10.84 11.601 11.934 12.879 average 10.7 11.5 11.3 11.2 (static: 8.7) fr.yahoo.com: best 9.10 8.415 8.400 9.602 worst 9.99 8.940 8.605 10.963 average 9.4 8.7 8.6 9.8 (static: 6.5) gentoo.org: best 1.44 1.863 1.299 1.485 worst 2.87 4.908 4.307 2.561 average 1.9 2.5 2.4 1.9 (static: 1.0) Note that static links increase performances by 20%
  • 62. Leveraging WebKit • Clean and simple extension mechanism • Leverage Device capabilities
  • 63. Leveraging WebKit • Adopted by CEM / ODM • AmigaOS Official Web Browser • Ported on QNX, Windows Mobile, OS 21, Nucleus, Many Embedded Linux flavors...
  • 64. Leveraging WebKit • Presentation extension: • Optimizes layout rendering with ad-hoc rules • Leverages specific capabilities with JS or HTML extensions
  • 65.
  • 66. Origyn Suite • If you have a QVGA screen • It’s not worth downloading a 2048*1025 px picture • Ask your RAM to store it • Ask your CPU to resize it • Display a 200*100 picture...
  • 67. Origyn Suite On the fly image shrinking and conversion
  • 68. Origyn Suite Use any look and feel
  • 75. MacOS with MacPort libs and GTK graphics
  • 77. AmigaOS with GUI and bookmarks
  • 81. OWB v3 Available
  • 82. OWB v3 Today http://www.sand-labs.org/svn/
  • 84.