Hi all!

These are the Isolate/Context memory profiling results:

  * context-memtest:
     1  : 984.0Kb
     5  : 1.7Mb
    10  : 2.4Mb
    15  : 3.0Mb

  * isolate-memtest:
     1  : 1.4Mb
     5  : 4.1Mb
    10  : 7.5Mb
    15 : 10.9Mb

Quiet like the previous ones.
I attached the modified sources to the mail.

Best regards,
Gabor Ballabas


----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

/*
 * Benchmark - Isolate/Context
 * Usage: context-memtest [number_of_engines]
 * 
 */

#include <v8.h>
#include <vector>
#include <cassert>
#include <cstdlib>


using namespace v8;
using namespace std;

class EngineWithDefaultIsolate {
public:
    EngineWithDefaultIsolate()
    {
        m_context = Context::New();
    }
    
    ~EngineWithDefaultIsolate()
    {
        m_context.Dispose();
    }

    void doStuff()
    {
        m_context->Enter();

        HandleScope scope;
        Handle<String> source = String::New("Math.abs(-1);");
        executeString(source, DONT_PRINT);

        m_context->Exit();
    }

private:
    EngineWithDefaultIsolate(const EngineWithDefaultIsolate&);
    EngineWithDefaultIsolate& operator=(const EngineWithDefaultIsolate&);

    enum PrintOption { DO_PRINT, DONT_PRINT };

    // Needs an outer HandleScope.
    void executeString(v8::Handle<v8::String> source, PrintOption option)
    {
        v8::TryCatch try_catch;
        v8::Handle<v8::Script> script = v8::Script::Compile(source);
        assert(!script.IsEmpty());
        v8::Handle<v8::Value> result = script->Run();
        assert(!result.IsEmpty());
        if (option == DO_PRINT) {
            v8::String::Utf8Value str(result);
            printf("%s\n", *str);
        }
    }

    Persistent<Context> m_context;
};


int main(int argc, char* argv[])
{
    if (argc > 2) {
        return 666;
    }

    int number_of_engines = 1;
    if (argc == 2) {
        int num = atoi(argv[1]);
        if (num) {
            number_of_engines = num;
        } else {
            return 666;
        }
    }

    HandleScope scope;
    Persistent<Context> context = Context::New();
    Context::Scope context_scope(context);

    vector<EngineWithDefaultIsolate* >* engines = new vector<EngineWithDefaultIsolate* >();
    for (int i = 0; i < number_of_engines; ++i) {
        engines->push_back(new EngineWithDefaultIsolate());
    }

    for (vector<EngineWithDefaultIsolate*>::iterator it = engines->begin();
            it != engines->end();
            ++it) {
        (*it)->doStuff();
    }

    for (vector<EngineWithDefaultIsolate*>::iterator it = engines->begin();
            it != engines->end();
            ++it) {
        delete *it;
    }

    delete engines;

    context.Dispose();
    return 0;
}



/*
 * Benchmark - Isolate/Context
 * Usage: isolate-memtest [number_of_engines]
 * 
 */


#include <v8.h>
#include <vector>
#include <cstdlib>
#include <cassert>


using namespace v8;
using namespace std;


class EngineWithOwnIsolate {
public:
    EngineWithOwnIsolate()
    {
        m_isolate = Isolate::New();
        m_isolate->Enter();
        m_context = Context::New();
        m_isolate->Exit();
    }

    ~EngineWithOwnIsolate()
    {
        m_isolate->Enter();
        m_context.Dispose();
        m_isolate->Exit();
        m_isolate->Dispose();
    }

    void doStuff()
    {
        m_isolate->Enter();
        m_context->Enter();

        HandleScope scope;
        Handle<String> source = String::New("Math.abs(-1);");
        executeString(source, DONT_PRINT);

        m_context->Exit();
        m_isolate->Exit();
    }

private:
    EngineWithOwnIsolate(const EngineWithOwnIsolate&);
    EngineWithOwnIsolate& operator=(const EngineWithOwnIsolate&);

    enum PrintOption { DO_PRINT, DONT_PRINT };

    // Needs an outer HandleScope.
    void executeString(v8::Handle<v8::String> source, PrintOption option)
    {
        v8::TryCatch try_catch;
        v8::Handle<v8::Script> script = v8::Script::Compile(source);
        assert(!script.IsEmpty());
        v8::Handle<v8::Value> result = script->Run();
        assert(!result.IsEmpty());
        if (option == DO_PRINT) {
            v8::String::Utf8Value str(result);
            printf("%s\n", *str);
        }
    }

    Isolate* m_isolate;
    Persistent<Context> m_context;
};


int main(int argc, char* argv[])
{
    if (argc > 2) {
        return 666;
    }

    int number_of_engines = 1;
    if (argc == 2) {
        int num = atoi(argv[1]);
        if (num) {
            number_of_engines = num;
        } else {
            return 666;
        }
    }

    HandleScope scope;
    Persistent<Context> context = Context::New();
    Context::Scope context_scope(context);

    vector<EngineWithOwnIsolate* >* engines = new vector<EngineWithOwnIsolate* >();
    for (int i = 0; i < number_of_engines; ++i) {
        engines->push_back(new EngineWithOwnIsolate());
    }

    for (vector<EngineWithOwnIsolate*>::iterator it = engines->begin();
            it != engines->end();
            ++it) {
        (*it)->doStuff();
    }

    for (vector<EngineWithOwnIsolate*>::iterator it = engines->begin();
            it != engines->end();
            ++it) {
        delete *it;
    }

    delete engines;

    context.Dispose();
    return 0;
}



_______________________________________________
Qt-script mailing list
[email protected]
http://lists.qt.nokia.com/mailman/listinfo/qt-script

Reply via email to