Concrete Architecture of Firefox 2 Team One July 6, 2007 Team One July 6, 2007
Agenda Introduction Concrete Architecture Comparison with Conceptual Modules JavaScript Interpreter XML Parser Display Backend Conclusion Introduction Concrete Architecture Comparison with Conceptual Modules JavaScript Interpreter XML Parser Display Backend Conclusion
Introduction Analyzing Concrete Architecture Previously researched Conceptual Architecture Extracted Architecture from code Analyzing Concrete Architecture Previously researched Conceptual Architecture Extracted Architecture from code
Comparison with Conceptual High cohesion (XPCOM) Additional layers Extensions Common Additional dependencies High cohesion (XPCOM) Additional layers Extensions Common Additional dependencies
Conceptual Architecture
Concrete Boxes
Concrete Arrows
Modules: JS Interpreter Called SpiderMonkey Written in C Many classes and packages, but 6 seem to be most important Called SpiderMonkey Written in C Many classes and packages, but 6 seem to be most important
LiveConnect Package in SpiderMonkey Bridge between JavaScript and Java Depends on a few internal classes and XPCOM Package in SpiderMonkey Bridge between JavaScript and Java Depends on a few internal classes and XPCOM
LiveConnect Dependencies
XPConnect Package in SpiderMonkey Allows JavaScript objects access to XPCOM objects and vice-versa Depends on some internal classes and XPCOM Package in SpiderMonkey Allows JavaScript objects access to XPCOM objects and vice-versa Depends on some internal classes and XPCOM
XPConnect Dependencies
JSInterp Class in SpiderMonkey JavaScript Interpreter Class All classes that depend on JSInterp are internal All classes JSInterp depends on are internal Class in SpiderMonkey JavaScript Interpreter Class All classes that depend on JSInterp are internal All classes JSInterp depends on are internal
API Classes JSAPI, JSXDRAPI, JSDbgAPI Used by external classes Depend on and are depended on by many internal classes Façade Pattern JSAPI, JSXDRAPI, JSDbgAPI Used by external classes Depend on and are depended on by many internal classes Façade Pattern
API Classes JSAPI is the main API for SpiderMonkey JSXDRAPI is the external data representation API JSDbgAPI is SpiderMonkey’s debug API JSAPI is the main API for SpiderMonkey JSXDRAPI is the external data representation API JSDbgAPI is SpiderMonkey’s debug API
Modules: XML Parser
XML Parsers expat module performs DOM parsing xml module performs SAX parsing Both work independently of each other expat module is self-contained and has no dependencies; however, xml module relies on stream input and string operations support from xpcom expat module performs DOM parsing xml module performs SAX parsing Both work independently of each other expat module is self-contained and has no dependencies; however, xml module relies on stream input and string operations support from xpcom
htmlparser Module Abstracts away string and unichar issues Delegates parsing requests to expat and xml modules, and receives the result back. Implements something close to a façade, however, xml talks to xpcom Abstracts away string and unichar issues Delegates parsing requests to expat and xml modules, and receives the result back. Implements something close to a façade, however, xml talks to xpcom
Deviation from Conceptual Nothing is invoking/depending on parser module for XML parsing requests Could be a dynamic dependency rather than static, which bfx and lsedit cannot capture Nothing is invoking/depending on parser module for XML parsing requests Could be a dynamic dependency rather than static, which bfx and lsedit cannot capture
Modules: Display Backend Set of platform-independent drawing primitives Adapter to the native graphics interface (GTK, GDI, etc) PostScript handling Shared sub-components Set of platform-independent drawing primitives Adapter to the native graphics interface (GTK, GDI, etc) PostScript handling Shared sub-components
Modules: Display Backend
Deviation from Conceptual UI talks directly to Display Backend Interaction with Common intl xpcom nsprpub UI talks directly to Display Backend Interaction with Common intl xpcom nsprpub
Conclusion Conceptual Architecture Useful Additional Layers Additional Dependencies Conceptual Architecture Useful Additional Layers Additional Dependencies
Thank you Questions?