Thanks for the tip. Can you perhaps drop the internal stream class names, so I 
can investigate a bit on how to use them.

Thank you!

On Friday, October 24, 2014 4:56:07 PM UTC+2, David Rajchenbach-Teller wrote:
> Well, for one thing, never perform I/O on the main thread. It really
> kills performance, as you witness. No amount of batching is going to be
> sufficient.
> 
> Also, why don't you use our stream classes?
> 
> Cheers,
>  David
> 
> On 24/10/14 14:36, Josip Maras wrote:
> > Hi,
> > 
> > I'm extending the Firefox source in order to log some information during 
> > web app execution, for example event, script executions, new element 
> > creations, removals, attribute modifications, etc. Since these things occur 
> > often, when I load a more demanding application (e.g. facebook), everything 
> > hangs for a while, because there is a large number of relatively small 
> > pieces of information being written to a file. 
> > 
> > Because of this, i was thinking of doing it in batches, having one global 
> > extern stream variable where all longs are added to, and when enough 
> > information gets accumulated to write it to a file, and avoid these 
> > hangings.
> > 
> > Since I'm a noob C++ "programmer" I will paste some code of what i've done, 
> > just in case:
> > 
> > I have one header file with the extern variable:
> > 
> > -- FC_ExternStreamDeclaration.h --
> > 
> > #ifndef FC_EXTERN_VAR_DECL_H
> > #define FC_EXTERN_VAR_DECL_H
> > 
> > #include <stdio.h>
> > #include <sstream>
> > #include <fstream>
> > 
> > extern std::stringstream FC_LOG_STREAM;
> > 
> > #endif //FC_EXTERN_VAR_DECL_H
> > 
> > 
> > and one header with the logging functionality
> > 
> > -- FC_Log.h --
> > 
> > #pragma once
> > #ifndef FC_LOG_H
> > #define FC_LOG_H
> > 
> > #include <stdio.h>
> > #include <sstream>
> > #include <fstream>
> > 
> > #include "FC_ExternStreamDeclaration.h"
> > 
> > inline void WriteToStream(const char** fragments, int length)
> > {   
> >   //add to stream
> >   //if stream big enough write to file
> > }
> > #endif //FC_LOG_H
> > 
> > and in nsBrowserApp.cpp where the main function is defined, i define the 
> > variable and include the headers
> > 
> > ----- nsBrowserApp.cpp ---
> > 
> > #include "FC_ExternStreamDeclaration.h"
> > #include "FC_Log.h"
> > 
> > std::stringstream FC_LOG_STREAM;
> > 
> > And then, in each file from which i do logging, i include the header files 
> > and call the WriteToStream function. For example, I'm doing it from 
> > Interpreter.cpp, Eval.cpp, nsINode.h, etc. (all over the code).
> > 
> > And i thought that this will be enough. However, i get: error LNK2001 
> > unresolved external symbol stringstream FC_LOG_STREAM. If i define it 
> > there, the compilation succeeds, but I effectively get two different 
> > streams, one for the JavaScript execution, and the other for the DOM and 
> > the rest of the browser.
> > 
> > I'm thinking this happens because these variables are in different dlls. 
> > I would be grateful for any tips about fixing it. 
> > Sorry for the long question.
> > 
> > Thank you, 
> > 
> > Josip 
> > _______________________________________________
> > dev-platform mailing list
> > dev-platform@lists.mozilla.org
> > https://lists.mozilla.org/listinfo/dev-platform
> > 
> 
> 
> -- 
> David Rajchenbach-Teller, PhD
>  Performance Team, Mozilla

_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to