SlideShare una empresa de Scribd logo
1 de 31
Портирование C++Портирование C++
приложений на FLASCC:приложений на FLASCC:
Опыт Unreal Engine 3Опыт Unreal Engine 3
Павел Наказненко, 2013Павел Наказненко, 2013
p.nakaznenko@gmail.comp.nakaznenko@gmail.com
Это вообще о чем?

О технологии Adobe Flash

О том, что такое AlchemyFLASCC

О том, как происходит портирование
на Flash с помощью FLASCC

О моей коллекции граблей
Все это на основе опыта
портирования Unreal Engine 3
А Вы, собственно, кто?

Павел Наказненко, Красноярск

сМагистр в области микропроцессорных
систем

Почти Настоящий Сварщик

В геймдеве 7 лет

Зашипил всякого на мобилы, браузер,
PC, mac, Xbox360, PS3

Работал в США 2 года

Руки по локоть в Flash'е
Adobe Flash

Кросс-платформенная технология

Большая база пользователей

Flash Player – работает как standalone
или как plugin

Action Script 3 – ECMAscript 4

AVM2 исполняет файлы SWF (abc-
bytecode)
Adobe Flash 11.4

3D Аппартное ускорение

Поддержка шейдеров (AGAL)

Многопоточность
С++ → Flash – Зачем?

Есть готовая иградемо

Хочется расширить userbaseпривести
траффик

Хочется на все платформы

И при этом чтоб одна codebase

И при этом чтоб с минимальными
затратами
С++ → Flash – Как?

Вручную = долго и дорого

Codegen + Flash Wrapper = дорого и
забагованно

Как то иначе?
С помощью
LLVM!
LLVM – low level virtual
machine

Платформонезависимая виртуальная
машина с RISC-подобными
инструкциями

Link time optimization, Compile time
optimization

Куча back-end'ов: x86, x86_64, AMD64,
PowerPC, MIPS, целочисленные ARM

Куча front-end'ов: C++, ObjC, Fortran,
Ada, Haskell, Java, Python, Ruby, AS3,
GLSL, D, Rust и продолжают появляться
Как поможет LLVM?

Компилируем С++ код в промежуточные
LLVM инструкции

LLVM тулсет собирает промежуточные
файлы под конкретную платформу в
родной для платформы машинный код

GCC, Clang
Adobe FLASCC (Alchemy)

Это GCC тулсет с поддержкой LLVM

Компилирует C++ в байткод LLVM

Производит LLVM compile- and link-time
оптимизацию

Собирает LLVM байткод в AVM2 байткод
(ABC)

Отдает результат обычному Flash build-
pipeline
Подробнее о FLASCC

GCC based toolset + Cygwin in redist

Кое-что спортировали за вас: SDL, zlib, vorbis ogg, box2d,
libqren, Bullet, Lua, итд.
(подробнее на сайте Adobe)

Аппаратное ускорение и рендер 3D с помощью вызовов к
Stage3D

GLS3D – OpenGL-подобный враппер для Stage3D API

AGAL - HLSLGLSL-подобный язык шейдеров

Поддерживаются P-threads, OpenMP

Для отладки - GDB

Для профайлинга кода, памяти и Stage3d – Adobe Scout
Портирование на Flash
за 7 шагов
1) Скачать FLASCC sdk
2) Прочесть ReadMe
3) С помощью туториалов по
I/O, многопоточности и
рендеру соорудить каркас
4) Написать makefile
5) Профайлить Scout'ом
6) Использовать GDB для
отладки
7) Профит!
Не все так просто

Сырой стек технологий

Тулсет часто падает с OutOfMemoryException
при попытке сбилдить debug версию большого
проекта (размером с UE3)

Изменил строчку в .cpp = 15 минут жди билд
Чуть меньше при -O0

При разных -Ox – разные build pipeline

Компилируй в голове!

Профайлер очень долго не работал
Не все так просто – часть 2

Портирование происходило на дорелизных
версиях FLASCC. Поломки с каждым новым
дропом

В AVM2 нет такого понятия как
многопоточность

Очень большой оверхед на потоки и memory
sharing

Asset Pipeline придется писать свой

Надо написать кучу врапперов (RHI, I/O, Net
итд)
VFS
или кстати о врапперах

VFS – Virtual File System,
унифицированный, POSIX-подобный
интерфейс доступа к файлам

Часть стандарта FLASCC sdk

Для справки: Flash не может совершать
произвольные I/O операции с локальной
файловой системой

Два способа заполнения VFS: embed
data и загрузка run-time
VFS
или кстати о врапперах, ч. 2

Для общих случаев FLASCC SDK
предоставляет свои имлементации
(InMemoryBackingStore для Embed,
LSOBackingStore для хранения в кеше,
HTTPBackingSTore для динамической
подгрузки c WWW, итп)

Загрузка происходит в основном потоке, а к
файлам обращаются второстепенные потоки

Надо шарить память или перепоручать IO
главному потоку
ES2API
или кстати о врапперах, ч. 3

Оборачивает Stage3D API аля GLES1.0
API

Часть Adobe in-house codebase (публике
не доступен)

Все еще в разработке
Сеть
или кстати о врапперах, ч. 4

Flash не поддерживает UDP

Придется написать UDP over TCP
прослойку, либо менять приложение
под TCP

Нет возможности прямого Peer-to-Peer
соединения

Cross-domain policy hell
Особенности
многопоточности в Adobe
Flash

Back-end: Байткод компонуется в отдельный блок,
который запускается на новом фоновом инстансе
AVM2.

Front-end C++ : POSIX совместимый интерфейс
(pthreads)

Атомики: семейство __sync_***

Front-end AS3: Worker, Mutex, Condition (пакет
flash.concurrent)

Flash Player работает в потоке UI (Primordial)

Точка входа в приложение может быть достигнута
через: startBackground и startAsync
Моя коллекция граблей

Worker не имеет доступа к Stage3d

Worker не может совершать IO операции с
локальной или удаленной файловой системой
из-за security sandbox restrictions

Через startBackground точка входа не работает
из-за бага с конструкторами статических
объектов

Доступ к общей памяти через сообщения =
сериализовать и десериализовать данные на
каждый чих

Костыль: Перепоручение доступа к памяти
главному потоку
Моя коллекция граблей – ч. 2

Точка входа через startAsync, а затем создаем поток с
логикой (обход проблемы с startBackground)

Каждое перепоручение команды главному потоку занимает
frame interval, т.е. 16ms в среднем

while (true); на главном потоке вешает Flash Player

Чтобы перепоручить главному потоку исполнение команды,
ее нужно обернуть:
void* function(void *args);

Из за all-purpose встроенного аллокатора сильная
фрагментация памяти. Обходится трюком с утечкой памяти

Маленький лимит памяти – около 600 Mb на приложение,
1.4Gb на весь Flash Player (Windows)
Моя коллекция граблей – ч. 3

Нет memory page protection. Т.е. вполне работает:
*((int*)0) = 100;

Оверхед на каждый созданный поток в среднем 120
Мб

AlcZIP не освобождает память после декомпрессии

Чтобы профайлить приложение нужно добавлять
специальный тег телеметрии сторонним питон
скриптом
Отладка (общее)

GDB, но только для небольшой
codebase

Для большой codebase отладочную
версию не собрать. Так что никаких
breakpoint, step-by-step и проч.

Множество inline_as3(“trace((new
Error()).getStackTrace());n”);

Включаем мозг. Компилируем в уме (т.к.
билд в среднем 15 мин)

Мониторим лог Flash Player с помощью
“tail” или подобного, например, “Baretail”
Отладка (render)

Flash Stage3D использует DirectX
renderer на Windows

Stage3D API вызовы ≈ DirectX API
вызовы

AGAL ≈ HLSL

Windows Standalone Flash Player -
обычное DirectX приложение

Используйте PIX для отладки рендера!
Профайлинг

Adobe Scout

Потребуется -advanced-telemetry флаг.
Раньше нужен был специальный скрипт,
сейчас поддерживается компилятором

Позволяет профайлить rendering,
memory, calls, display lists и потоки

Часто придется использовать вместо
дебаггера
Все так плохо?

Таки портировали же:
http://www.unrealengine.com/flash

Обещают интеграцию Clang вместо
GCC (читай: будет отладка и
нормальный build time)

Выпустили open-source версию FLASCC
– CrossBridge. Теперь можно не ныть и
править самому. Либо надеяться на
community

Есть конкурирующая технология:
emscripten
Бонусные ссылки

http://blogs.adobe.com/digitalmedia/2013/06/open-source-flash-c-compiler-
crossbridge/

http://www.adobe.com/devnet/games/articles/compiling-opengl-games.html

http://gaming.adobe.com/technologies/flascc/

http://blogs.adobe.com/flascc/

https://github.com/alexmac/alcexamples

https://github.com/alexmac/alcextra

https://github.com/adamcath/telemetry-utils

https://github.com/alexmac/

http://www.baremetalsoft.com/baretail/
Бонусный котейка
(за терпение)

Más contenido relacionado

La actualidad más candente

антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
Sampling profiling
Sampling profilingSampling profiling
Sampling profilingSlach
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
 
Стажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверамиСтажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверами7bits
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
Highload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighLoad2009
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновAnton Piskunov
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Ontico
 
Выступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance ConferenceВыступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance ConferenceEYevseyeva
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Ontico
 
JavaOne Russia 2013: Опыт использования JDK и Glassfish с Raspberry Pi
JavaOne Russia 2013: Опыт использования JDK и Glassfish с Raspberry PiJavaOne Russia 2013: Опыт использования JDK и Glassfish с Raspberry Pi
JavaOne Russia 2013: Опыт использования JDK и Glassfish с Raspberry PiYuri Trukhin
 
Devpoint2 video in internet
Devpoint2 video in internetDevpoint2 video in internet
Devpoint2 video in internetMax Lapshin
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует GoArtem Kovardin
 

La actualidad más candente (20)

антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
Sampling profiling
Sampling profilingSampling profiling
Sampling profiling
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Framework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs ChaliceFramework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs Chalice
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
openSUSE Build Server от Б до Ю
openSUSE Build Server от Б до ЮopenSUSE Build Server от Б до Ю
openSUSE Build Server от Б до Ю
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
Стажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверамиСтажировка 2015. Разработка. Занятие 7. Работа с серверами
Стажировка 2015. Разработка. Занятие 7. Работа с серверами
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
Highload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighload2009 Rybak Badoo Os
Highload2009 Rybak Badoo Os
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демонов
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
Выступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance ConferenceВыступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance Conference
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
 
JavaOne Russia 2013: Опыт использования JDK и Glassfish с Raspberry Pi
JavaOne Russia 2013: Опыт использования JDK и Glassfish с Raspberry PiJavaOne Russia 2013: Опыт использования JDK и Glassfish с Raspberry Pi
JavaOne Russia 2013: Опыт использования JDK и Glassfish с Raspberry Pi
 
Devpoint2 video in internet
Devpoint2 video in internetDevpoint2 video in internet
Devpoint2 video in internet
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 
Erlyvideo v3
Erlyvideo v3Erlyvideo v3
Erlyvideo v3
 

Destacado

Các lớp học 1:1 và lớp nhóm tại trường UV ESL
Các lớp học 1:1 và lớp nhóm tại trường UV ESLCác lớp học 1:1 và lớp nhóm tại trường UV ESL
Các lớp học 1:1 và lớp nhóm tại trường UV ESLUV ESL Center
 
Teacher Marvin - Media Education Group Class - UV ESL Center 2017
Teacher Marvin - Media Education Group Class - UV ESL Center 2017Teacher Marvin - Media Education Group Class - UV ESL Center 2017
Teacher Marvin - Media Education Group Class - UV ESL Center 2017UV ESL Center
 
Rbs jan-febr 2015-
Rbs jan-febr 2015-Rbs jan-febr 2015-
Rbs jan-febr 2015-Rbs Jabbeke
 
ECU ODS data integration using OWB and SSIS UNC Cause 2013
ECU ODS data integration using OWB and SSIS UNC Cause 2013ECU ODS data integration using OWB and SSIS UNC Cause 2013
ECU ODS data integration using OWB and SSIS UNC Cause 2013Keith Washer
 
Intro warm-up-computers-k3-literacy
Intro warm-up-computers-k3-literacyIntro warm-up-computers-k3-literacy
Intro warm-up-computers-k3-literacysallyeverson
 
Rbs maa-apr-2016
Rbs maa-apr-2016Rbs maa-apr-2016
Rbs maa-apr-2016Rbs Jabbeke
 
Trường UV ESL - UV ESL Center
Trường UV ESL - UV ESL CenterTrường UV ESL - UV ESL Center
Trường UV ESL - UV ESL CenterUV ESL Center
 
Can HIEs Really Achieve Financial Sustainability: A Case Study and Discussion...
Can HIEs Really Achieve Financial Sustainability: A Case Study and Discussion...Can HIEs Really Achieve Financial Sustainability: A Case Study and Discussion...
Can HIEs Really Achieve Financial Sustainability: A Case Study and Discussion...William Buddy Gillespie ITIL Certified
 
Rbs nov-dec 2015
Rbs nov-dec 2015Rbs nov-dec 2015
Rbs nov-dec 2015Rbs Jabbeke
 
Social Media for volunteers in a cultural event
Social Media for volunteers in a cultural eventSocial Media for volunteers in a cultural event
Social Media for volunteers in a cultural eventAggelos Synadakis
 
Social Travel Britain 2015 conference: Visit Wiltshire
Social Travel Britain 2015 conference: Visit WiltshireSocial Travel Britain 2015 conference: Visit Wiltshire
Social Travel Britain 2015 conference: Visit WiltshireMark Frary
 

Destacado (20)

Etm kece
Etm keceEtm kece
Etm kece
 
Video more.ru oct
Video more.ru octVideo more.ru oct
Video more.ru oct
 
Internet de las cosas
Internet de las cosasInternet de las cosas
Internet de las cosas
 
Các lớp học 1:1 và lớp nhóm tại trường UV ESL
Các lớp học 1:1 và lớp nhóm tại trường UV ESLCác lớp học 1:1 và lớp nhóm tại trường UV ESL
Các lớp học 1:1 và lớp nhóm tại trường UV ESL
 
Teacher Marvin - Media Education Group Class - UV ESL Center 2017
Teacher Marvin - Media Education Group Class - UV ESL Center 2017Teacher Marvin - Media Education Group Class - UV ESL Center 2017
Teacher Marvin - Media Education Group Class - UV ESL Center 2017
 
Bible
BibleBible
Bible
 
Rbs jan-febr 2015-
Rbs jan-febr 2015-Rbs jan-febr 2015-
Rbs jan-febr 2015-
 
ECU ODS data integration using OWB and SSIS UNC Cause 2013
ECU ODS data integration using OWB and SSIS UNC Cause 2013ECU ODS data integration using OWB and SSIS UNC Cause 2013
ECU ODS data integration using OWB and SSIS UNC Cause 2013
 
Intro warm-up-computers-k3-literacy
Intro warm-up-computers-k3-literacyIntro warm-up-computers-k3-literacy
Intro warm-up-computers-k3-literacy
 
Rbs maa-apr-2016
Rbs maa-apr-2016Rbs maa-apr-2016
Rbs maa-apr-2016
 
Seo OnPage
Seo OnPageSeo OnPage
Seo OnPage
 
Be fair
Be fairBe fair
Be fair
 
Trường UV ESL - UV ESL Center
Trường UV ESL - UV ESL CenterTrường UV ESL - UV ESL Center
Trường UV ESL - UV ESL Center
 
CV - Deepa Gorule 7th March'16
CV - Deepa Gorule 7th March'16CV - Deepa Gorule 7th March'16
CV - Deepa Gorule 7th March'16
 
Can HIEs Really Achieve Financial Sustainability: A Case Study and Discussion...
Can HIEs Really Achieve Financial Sustainability: A Case Study and Discussion...Can HIEs Really Achieve Financial Sustainability: A Case Study and Discussion...
Can HIEs Really Achieve Financial Sustainability: A Case Study and Discussion...
 
Rbs nov-dec 2015
Rbs nov-dec 2015Rbs nov-dec 2015
Rbs nov-dec 2015
 
ict pro
ict proict pro
ict pro
 
Social Media for volunteers in a cultural event
Social Media for volunteers in a cultural eventSocial Media for volunteers in a cultural event
Social Media for volunteers in a cultural event
 
Social Travel Britain 2015 conference: Visit Wiltshire
Social Travel Britain 2015 conference: Visit WiltshireSocial Travel Britain 2015 conference: Visit Wiltshire
Social Travel Britain 2015 conference: Visit Wiltshire
 
Manual cpmd
Manual cpmdManual cpmd
Manual cpmd
 

Similar a Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко. Unigine Open Air 2013.

Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
Разработка мобильных приложений под iOS
Разработка мобильных приложений под iOSРазработка мобильных приложений под iOS
Разработка мобильных приложений под iOSSCINO
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4rit2011
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Секреты сборки мусора в Java
Секреты сборки мусора в JavaСекреты сборки мусора в Java
Секреты сборки мусора в Javaaragozin
 
Секреты сборки мусора в Java (Алексей Рагозин)
Секреты сборки мусора в Java (Алексей Рагозин)Секреты сборки мусора в Java (Алексей Рагозин)
Секреты сборки мусора в Java (Алексей Рагозин)Ontico
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
Большие проблемы маленьких устройств
Большие проблемы маленьких устройствБольшие проблемы маленьких устройств
Большие проблемы маленьких устройствAlexander Kalouguine
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиITCrowd Almaty
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flashguestb0af15
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаITCrowd Almaty
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Tanya Denisyuk
 
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокRoman_Lut
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 

Similar a Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко. Unigine Open Air 2013. (20)

Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Разработка мобильных приложений под iOS
Разработка мобильных приложений под iOSРазработка мобильных приложений под iOS
Разработка мобильных приложений под iOS
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Секреты сборки мусора в Java
Секреты сборки мусора в JavaСекреты сборки мусора в Java
Секреты сборки мусора в Java
 
Секреты сборки мусора в Java (Алексей Рагозин)
Секреты сборки мусора в Java (Алексей Рагозин)Секреты сборки мусора в Java (Алексей Рагозин)
Секреты сборки мусора в Java (Алексей Рагозин)
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
Большие проблемы маленьких устройств
Большие проблемы маленьких устройствБольшие проблемы маленьких устройств
Большие проблемы маленьких устройств
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
 
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движок
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
php frameworks
php frameworksphp frameworks
php frameworks
 

Más de Unigine Corp.

С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)Unigine Corp.
 
Продажи на азиатский рынок (Ден Шергин)
Продажи на азиатский рынок (Ден Шергин)Продажи на азиатский рынок (Ден Шергин)
Продажи на азиатский рынок (Ден Шергин)Unigine Corp.
 
Технический писатель: ожидание vs реальность (Ольга Кириченко) - DocFactor 2016
Технический писатель: ожидание vs реальность (Ольга Кириченко) - DocFactor 2016Технический писатель: ожидание vs реальность (Ольга Кириченко) - DocFactor 2016
Технический писатель: ожидание vs реальность (Ольга Кириченко) - DocFactor 2016Unigine Corp.
 
Анатомия одного кадра в Unigine Engine (Леонид Лубенко) - DEBUG TiME #3 2016
Анатомия одного кадра в Unigine Engine (Леонид Лубенко) - DEBUG TiME #3 2016Анатомия одного кадра в Unigine Engine (Леонид Лубенко) - DEBUG TiME #3 2016
Анатомия одного кадра в Unigine Engine (Леонид Лубенко) - DEBUG TiME #3 2016Unigine Corp.
 
Базовые понятия 3D графики (Ден Шергин) - DEBUG TiME #3 2016
Базовые понятия 3D графики (Ден Шергин) - DEBUG TiME #3 2016Базовые понятия 3D графики (Ден Шергин) - DEBUG TiME #3 2016
Базовые понятия 3D графики (Ден Шергин) - DEBUG TiME #3 2016Unigine Corp.
 
Переход к визуализации с учетом физических свойств материалов на примере 3D п...
Переход к визуализации с учетом физических свойств материалов на примере 3D п...Переход к визуализации с учетом физических свойств материалов на примере 3D п...
Переход к визуализации с учетом физических свойств материалов на примере 3D п...Unigine Corp.
 
Коротенько про веб-тесты. Екатерина Попова. Debug time#2 2014
Коротенько про веб-тесты. Екатерина Попова. Debug time#2 2014Коротенько про веб-тесты. Екатерина Попова. Debug time#2 2014
Коротенько про веб-тесты. Екатерина Попова. Debug time#2 2014Unigine Corp.
 
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014Unigine Corp.
 
20 проектов, 6 платформ, больше миллиона строк кода, 3 qa инженера. Дмитрий К...
20 проектов, 6 платформ, больше миллиона строк кода, 3 qa инженера. Дмитрий К...20 проектов, 6 платформ, больше миллиона строк кода, 3 qa инженера. Дмитрий К...
20 проектов, 6 платформ, больше миллиона строк кода, 3 qa инженера. Дмитрий К...Unigine Corp.
 
Геймификация - играя делаем игры. Наталья Оглоблина. Unigine Open Air 2013
Геймификация - играя делаем игры. Наталья Оглоблина. Unigine Open Air 2013Геймификация - играя делаем игры. Наталья Оглоблина. Unigine Open Air 2013
Геймификация - играя делаем игры. Наталья Оглоблина. Unigine Open Air 2013Unigine Corp.
 
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Unigine Corp.
 
Просто, нудно, сложно. Андрей Аксенов. Unigine Open Air 2013
Просто, нудно, сложно. Андрей Аксенов. Unigine Open Air 2013Просто, нудно, сложно. Андрей Аксенов. Unigine Open Air 2013
Просто, нудно, сложно. Андрей Аксенов. Unigine Open Air 2013Unigine Corp.
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Unigine Corp.
 
Технологии Alawar для создания игр: какие есть сегодня и какие будут завтра. ...
Технологии Alawar для создания игр: какие есть сегодня и какие будут завтра. ...Технологии Alawar для создания игр: какие есть сегодня и какие будут завтра. ...
Технологии Alawar для создания игр: какие есть сегодня и какие будут завтра. ...Unigine Corp.
 
Руководство для программистов по устройству на работу в Unigine
Руководство для программистов по устройству на работу в UnigineРуководство для программистов по устройству на работу в Unigine
Руководство для программистов по устройству на работу в UnigineUnigine Corp.
 
Особенности разработки программных продуктов для международного рынка (Unigin...
Особенности разработки программных продуктов для международного рынка (Unigin...Особенности разработки программных продуктов для международного рынка (Unigin...
Особенности разработки программных продуктов для международного рынка (Unigin...Unigine Corp.
 
Разработка мультиплатформенных 3D игр (Unigine, CodeFest2012)
Разработка мультиплатформенных 3D игр (Unigine, CodeFest2012)Разработка мультиплатформенных 3D игр (Unigine, CodeFest2012)
Разработка мультиплатформенных 3D игр (Unigine, CodeFest2012)Unigine Corp.
 

Más de Unigine Corp. (17)

С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)
 
Продажи на азиатский рынок (Ден Шергин)
Продажи на азиатский рынок (Ден Шергин)Продажи на азиатский рынок (Ден Шергин)
Продажи на азиатский рынок (Ден Шергин)
 
Технический писатель: ожидание vs реальность (Ольга Кириченко) - DocFactor 2016
Технический писатель: ожидание vs реальность (Ольга Кириченко) - DocFactor 2016Технический писатель: ожидание vs реальность (Ольга Кириченко) - DocFactor 2016
Технический писатель: ожидание vs реальность (Ольга Кириченко) - DocFactor 2016
 
Анатомия одного кадра в Unigine Engine (Леонид Лубенко) - DEBUG TiME #3 2016
Анатомия одного кадра в Unigine Engine (Леонид Лубенко) - DEBUG TiME #3 2016Анатомия одного кадра в Unigine Engine (Леонид Лубенко) - DEBUG TiME #3 2016
Анатомия одного кадра в Unigine Engine (Леонид Лубенко) - DEBUG TiME #3 2016
 
Базовые понятия 3D графики (Ден Шергин) - DEBUG TiME #3 2016
Базовые понятия 3D графики (Ден Шергин) - DEBUG TiME #3 2016Базовые понятия 3D графики (Ден Шергин) - DEBUG TiME #3 2016
Базовые понятия 3D графики (Ден Шергин) - DEBUG TiME #3 2016
 
Переход к визуализации с учетом физических свойств материалов на примере 3D п...
Переход к визуализации с учетом физических свойств материалов на примере 3D п...Переход к визуализации с учетом физических свойств материалов на примере 3D п...
Переход к визуализации с учетом физических свойств материалов на примере 3D п...
 
Коротенько про веб-тесты. Екатерина Попова. Debug time#2 2014
Коротенько про веб-тесты. Екатерина Попова. Debug time#2 2014Коротенько про веб-тесты. Екатерина Попова. Debug time#2 2014
Коротенько про веб-тесты. Екатерина Попова. Debug time#2 2014
 
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
 
20 проектов, 6 платформ, больше миллиона строк кода, 3 qa инженера. Дмитрий К...
20 проектов, 6 платформ, больше миллиона строк кода, 3 qa инженера. Дмитрий К...20 проектов, 6 платформ, больше миллиона строк кода, 3 qa инженера. Дмитрий К...
20 проектов, 6 платформ, больше миллиона строк кода, 3 qa инженера. Дмитрий К...
 
Геймификация - играя делаем игры. Наталья Оглоблина. Unigine Open Air 2013
Геймификация - играя делаем игры. Наталья Оглоблина. Unigine Open Air 2013Геймификация - играя делаем игры. Наталья Оглоблина. Unigine Open Air 2013
Геймификация - играя делаем игры. Наталья Оглоблина. Unigine Open Air 2013
 
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
 
Просто, нудно, сложно. Андрей Аксенов. Unigine Open Air 2013
Просто, нудно, сложно. Андрей Аксенов. Unigine Open Air 2013Просто, нудно, сложно. Андрей Аксенов. Unigine Open Air 2013
Просто, нудно, сложно. Андрей Аксенов. Unigine Open Air 2013
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
 
Технологии Alawar для создания игр: какие есть сегодня и какие будут завтра. ...
Технологии Alawar для создания игр: какие есть сегодня и какие будут завтра. ...Технологии Alawar для создания игр: какие есть сегодня и какие будут завтра. ...
Технологии Alawar для создания игр: какие есть сегодня и какие будут завтра. ...
 
Руководство для программистов по устройству на работу в Unigine
Руководство для программистов по устройству на работу в UnigineРуководство для программистов по устройству на работу в Unigine
Руководство для программистов по устройству на работу в Unigine
 
Особенности разработки программных продуктов для международного рынка (Unigin...
Особенности разработки программных продуктов для международного рынка (Unigin...Особенности разработки программных продуктов для международного рынка (Unigin...
Особенности разработки программных продуктов для международного рынка (Unigin...
 
Разработка мультиплатформенных 3D игр (Unigine, CodeFest2012)
Разработка мультиплатформенных 3D игр (Unigine, CodeFest2012)Разработка мультиплатформенных 3D игр (Unigine, CodeFest2012)
Разработка мультиплатформенных 3D игр (Unigine, CodeFest2012)
 

Портирование C++ приложений на FLASCC: опыт Unreal Engine 3. Павел Наказненко. Unigine Open Air 2013.

  • 1. Портирование C++Портирование C++ приложений на FLASCC:приложений на FLASCC: Опыт Unreal Engine 3Опыт Unreal Engine 3 Павел Наказненко, 2013Павел Наказненко, 2013 p.nakaznenko@gmail.comp.nakaznenko@gmail.com
  • 2. Это вообще о чем?  О технологии Adobe Flash  О том, что такое AlchemyFLASCC  О том, как происходит портирование на Flash с помощью FLASCC  О моей коллекции граблей Все это на основе опыта портирования Unreal Engine 3
  • 3. А Вы, собственно, кто?  Павел Наказненко, Красноярск  сМагистр в области микропроцессорных систем  Почти Настоящий Сварщик  В геймдеве 7 лет  Зашипил всякого на мобилы, браузер, PC, mac, Xbox360, PS3  Работал в США 2 года  Руки по локоть в Flash'е
  • 4. Adobe Flash  Кросс-платформенная технология  Большая база пользователей  Flash Player – работает как standalone или как plugin  Action Script 3 – ECMAscript 4  AVM2 исполняет файлы SWF (abc- bytecode)
  • 5. Adobe Flash 11.4  3D Аппартное ускорение  Поддержка шейдеров (AGAL)  Многопоточность
  • 6. С++ → Flash – Зачем?  Есть готовая иградемо  Хочется расширить userbaseпривести траффик  Хочется на все платформы  И при этом чтоб одна codebase  И при этом чтоб с минимальными затратами
  • 7. С++ → Flash – Как?  Вручную = долго и дорого  Codegen + Flash Wrapper = дорого и забагованно  Как то иначе?
  • 9. LLVM – low level virtual machine  Платформонезависимая виртуальная машина с RISC-подобными инструкциями  Link time optimization, Compile time optimization  Куча back-end'ов: x86, x86_64, AMD64, PowerPC, MIPS, целочисленные ARM  Куча front-end'ов: C++, ObjC, Fortran, Ada, Haskell, Java, Python, Ruby, AS3, GLSL, D, Rust и продолжают появляться
  • 10. Как поможет LLVM?  Компилируем С++ код в промежуточные LLVM инструкции  LLVM тулсет собирает промежуточные файлы под конкретную платформу в родной для платформы машинный код  GCC, Clang
  • 11. Adobe FLASCC (Alchemy)  Это GCC тулсет с поддержкой LLVM  Компилирует C++ в байткод LLVM  Производит LLVM compile- and link-time оптимизацию  Собирает LLVM байткод в AVM2 байткод (ABC)  Отдает результат обычному Flash build- pipeline
  • 12. Подробнее о FLASCC  GCC based toolset + Cygwin in redist  Кое-что спортировали за вас: SDL, zlib, vorbis ogg, box2d, libqren, Bullet, Lua, итд. (подробнее на сайте Adobe)  Аппаратное ускорение и рендер 3D с помощью вызовов к Stage3D  GLS3D – OpenGL-подобный враппер для Stage3D API  AGAL - HLSLGLSL-подобный язык шейдеров  Поддерживаются P-threads, OpenMP  Для отладки - GDB  Для профайлинга кода, памяти и Stage3d – Adobe Scout
  • 13. Портирование на Flash за 7 шагов 1) Скачать FLASCC sdk 2) Прочесть ReadMe 3) С помощью туториалов по I/O, многопоточности и рендеру соорудить каркас 4) Написать makefile 5) Профайлить Scout'ом 6) Использовать GDB для отладки 7) Профит!
  • 14.
  • 15. Не все так просто  Сырой стек технологий  Тулсет часто падает с OutOfMemoryException при попытке сбилдить debug версию большого проекта (размером с UE3)  Изменил строчку в .cpp = 15 минут жди билд Чуть меньше при -O0  При разных -Ox – разные build pipeline  Компилируй в голове!  Профайлер очень долго не работал
  • 16. Не все так просто – часть 2  Портирование происходило на дорелизных версиях FLASCC. Поломки с каждым новым дропом  В AVM2 нет такого понятия как многопоточность  Очень большой оверхед на потоки и memory sharing  Asset Pipeline придется писать свой  Надо написать кучу врапперов (RHI, I/O, Net итд)
  • 17. VFS или кстати о врапперах  VFS – Virtual File System, унифицированный, POSIX-подобный интерфейс доступа к файлам  Часть стандарта FLASCC sdk  Для справки: Flash не может совершать произвольные I/O операции с локальной файловой системой  Два способа заполнения VFS: embed data и загрузка run-time
  • 18. VFS или кстати о врапперах, ч. 2  Для общих случаев FLASCC SDK предоставляет свои имлементации (InMemoryBackingStore для Embed, LSOBackingStore для хранения в кеше, HTTPBackingSTore для динамической подгрузки c WWW, итп)  Загрузка происходит в основном потоке, а к файлам обращаются второстепенные потоки  Надо шарить память или перепоручать IO главному потоку
  • 19. ES2API или кстати о врапперах, ч. 3  Оборачивает Stage3D API аля GLES1.0 API  Часть Adobe in-house codebase (публике не доступен)  Все еще в разработке
  • 20. Сеть или кстати о врапперах, ч. 4  Flash не поддерживает UDP  Придется написать UDP over TCP прослойку, либо менять приложение под TCP  Нет возможности прямого Peer-to-Peer соединения  Cross-domain policy hell
  • 21. Особенности многопоточности в Adobe Flash  Back-end: Байткод компонуется в отдельный блок, который запускается на новом фоновом инстансе AVM2.  Front-end C++ : POSIX совместимый интерфейс (pthreads)  Атомики: семейство __sync_***  Front-end AS3: Worker, Mutex, Condition (пакет flash.concurrent)  Flash Player работает в потоке UI (Primordial)  Точка входа в приложение может быть достигнута через: startBackground и startAsync
  • 22. Моя коллекция граблей  Worker не имеет доступа к Stage3d  Worker не может совершать IO операции с локальной или удаленной файловой системой из-за security sandbox restrictions  Через startBackground точка входа не работает из-за бага с конструкторами статических объектов  Доступ к общей памяти через сообщения = сериализовать и десериализовать данные на каждый чих  Костыль: Перепоручение доступа к памяти главному потоку
  • 23. Моя коллекция граблей – ч. 2  Точка входа через startAsync, а затем создаем поток с логикой (обход проблемы с startBackground)  Каждое перепоручение команды главному потоку занимает frame interval, т.е. 16ms в среднем  while (true); на главном потоке вешает Flash Player  Чтобы перепоручить главному потоку исполнение команды, ее нужно обернуть: void* function(void *args);  Из за all-purpose встроенного аллокатора сильная фрагментация памяти. Обходится трюком с утечкой памяти  Маленький лимит памяти – около 600 Mb на приложение, 1.4Gb на весь Flash Player (Windows)
  • 24. Моя коллекция граблей – ч. 3  Нет memory page protection. Т.е. вполне работает: *((int*)0) = 100;  Оверхед на каждый созданный поток в среднем 120 Мб  AlcZIP не освобождает память после декомпрессии  Чтобы профайлить приложение нужно добавлять специальный тег телеметрии сторонним питон скриптом
  • 25. Отладка (общее)  GDB, но только для небольшой codebase  Для большой codebase отладочную версию не собрать. Так что никаких breakpoint, step-by-step и проч.  Множество inline_as3(“trace((new Error()).getStackTrace());n”);  Включаем мозг. Компилируем в уме (т.к. билд в среднем 15 мин)  Мониторим лог Flash Player с помощью “tail” или подобного, например, “Baretail”
  • 26. Отладка (render)  Flash Stage3D использует DirectX renderer на Windows  Stage3D API вызовы ≈ DirectX API вызовы  AGAL ≈ HLSL  Windows Standalone Flash Player - обычное DirectX приложение  Используйте PIX для отладки рендера!
  • 27. Профайлинг  Adobe Scout  Потребуется -advanced-telemetry флаг. Раньше нужен был специальный скрипт, сейчас поддерживается компилятором  Позволяет профайлить rendering, memory, calls, display lists и потоки  Часто придется использовать вместо дебаггера
  • 28.
  • 29. Все так плохо?  Таки портировали же: http://www.unrealengine.com/flash  Обещают интеграцию Clang вместо GCC (читай: будет отладка и нормальный build time)  Выпустили open-source версию FLASCC – CrossBridge. Теперь можно не ныть и править самому. Либо надеяться на community  Есть конкурирующая технология: emscripten