Threading в Spidermonkey - PullRequest
       48

Threading в Spidermonkey

2 голосов
/ 23 января 2012

Я пытаюсь включить многопоточный отладочный дамп в SpiderMonkey, редактирование файла jsinterp.cpp. В основном то, что я пытаюсь сделать являются следующими:

  1. Поймать JSScript до начала основного цикла Interpret ().
  2. Открыть отдельную тему.
  3. В этом потоке вызовите js_Disassemble со скриптом, чтобы получить машинный код.
  4. Запишите машинный код в файл.

Причиной использования многопоточной версии является просто производительность проблемы. Некоторые аддоны становятся «не отвечающими», если я запускаю команду disassmeble и написать вывод в той же теме. Я могу получить вывод в одном нить, но это слишком медленно.

Я следовал учебнику в https://developer.mozilla.org/en/Making_Cross-Thread_Calls_Using_Runnables для создания тем. Но когда я его построил, я столкнулся с 11 "нерешенными внешняя ошибка символа. "Опять после некоторого поиска в Google, я узнал о установка XPCOM_GLUE с помощью #define XPCOM_GLUE 1. Однако на этот раз я столкнулся с новой проблемой: «базовый класс nsRunnable не определен». Я не могу найти решение для этого.

Любая помощь будет оценена. Спасибо,

1 Ответ

0 голосов
/ 25 апреля 2012

Вы не можете безопасно использовать отдельный поток для этого. Сборка мусора может выполняться в главном потоке и собирать JSScript из-под вас. Тогда процесс завершится сбоем.

js_Interpret вызывается каждый раз, когда SpiderMonkey входит в интерпретатор, независимо от того, запускает ли браузер <script> или просто вызывает функцию или onclick= прослушиватель событий. Таким образом, вы, вероятно, в конечном итоге сбросили одни и те же сценарии много раз Может быть, поэтому так медленно. Вместо этого попробуйте сбросить байт-код во время компиляции.

...