SlideShare a Scribd company logo
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?

More Related Content

What's hot

Scala & Lift (JEEConf 2012)
Scala & Lift (JEEConf 2012)Scala & Lift (JEEConf 2012)
Scala & Lift (JEEConf 2012)
Sander Mak (@Sander_Mak)
 
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
GR8Conf
 
Java 9 Modularity in Action
Java 9 Modularity in ActionJava 9 Modularity in Action
Java 9 Modularity in Action
Sander Mak (@Sander_Mak)
 
Benefits of OSGi in Practise
Benefits of OSGi in PractiseBenefits of OSGi in Practise
Benefits of OSGi in Practise
David 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 Felch
GR8Conf
 
Command Line Tool in swift
Command Line Tool in swiftCommand Line Tool in swift
Command Line Tool in swift
Yusuke Kita
 
Desiging for Modularity with Java 9
Desiging for Modularity with Java 9Desiging for Modularity with Java 9
Desiging for Modularity with Java 9
Sander Mak (@Sander_Mak)
 
GR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting Grails
GR8Conf
 
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
Azilen Technologies Pvt. Ltd.
 
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
Alexandre 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 Development
Sanjeeb Sahoo
 
Micronaut: Changing the Micro Future
Micronaut: Changing the Micro FutureMicronaut: Changing the Micro Future
Micronaut: Changing the Micro Future
Zachary Klein
 
Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGi
Ilya Rybak
 
Java modularization
Java modularizationJava modularization
Java modularization
Jonathan Vila
 
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
Stephen Chin
 
Karaf ee-apachecon eu-2012
Karaf ee-apachecon eu-2012Karaf ee-apachecon eu-2012
Karaf ee-apachecon eu-2012
Charles Moulliard
 
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
Arun Gupta
 
Modular JavaScript
Modular JavaScriptModular JavaScript
Modular JavaScript
Sander Mak (@Sander_Mak)
 

What's hot (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
 

Viewers also liked

alimentos
alimentosalimentos
alimentos
kampi79
 
Wilson Electric Company History
Wilson Electric Company HistoryWilson Electric Company History
Wilson Electric Company HistoryCarlosChag
 
Cyberwearz
CyberwearzCyberwearz
Cyberwearz
Bruce Damer
 
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
almenar
 
DEDUCCIONES FISCALES I+D+i
DEDUCCIONES FISCALES I+D+iDEDUCCIONES FISCALES I+D+i
DEDUCCIONES FISCALES I+D+i
guest46b74
 

Viewers also liked (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.....
 

Similar to 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 Widgets
romek
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
Ariya Hidayat
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
Ariya Hidayat
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
Ariya Hidayat
 
Guides To Analyzing WebKit Performance
Guides To Analyzing WebKit PerformanceGuides To Analyzing WebKit Performance
Guides To Analyzing WebKit Performance
National Cheng Kung University
 
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
Atlassian
 
Unit Testing 101
Unit Testing 101Unit Testing 101
Unit Testing 101
Dave Bouwman
 
Developments in the Qt WebKit Integration
Developments in the Qt WebKit IntegrationDevelopments in the Qt WebKit Integration
Developments in the Qt WebKit Integration
account inactive
 
API Virtualization: Mocking on Steroids
API Virtualization: Mocking on SteroidsAPI Virtualization: Mocking on Steroids
API Virtualization: Mocking on Steroids
SmartBear
 
Mutating Admission Webhook creation
Mutating Admission Webhook creationMutating Admission Webhook creation
Mutating Admission Webhook creation
Victor 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 architecture
Ben Wilcock
 
Building Papers
Building PapersBuilding Papers
Building Papers
Mahmoud
 
VASmalltalk, Today and Tomorrow
VASmalltalk, Today and TomorrowVASmalltalk, Today and Tomorrow
VASmalltalk, Today and Tomorrow
ESUG
 
WebSphere Portal Technical Overview
WebSphere Portal Technical OverviewWebSphere Portal Technical Overview
WebSphere Portal Technical Overview
Vincent 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 2018
Amazon Web Services
 
The WebKit project
The WebKit projectThe WebKit project
The WebKit project
juanjosanchezpenas
 
WebLogic and GraalVM
WebLogic and GraalVMWebLogic and GraalVM
WebLogic and GraalVM
Michel Schildmeijer
 
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
 

Similar to 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...
 

Recently uploaded

Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 

Recently uploaded (20)

Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 

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.