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