iOS
Marmalade
В мармеладе приложение сразу выделяет себе кучу фиксированного размера для работы с памятью. Довольно удобно.
Но вот что касается текстур (gles2), то память под них выделяется за пределами этой кучи и когда упирается в предел, то приложение
сразу же закрывается без каких-либо сообщений.
Я такое наблюдаю только со своей игрой, остальные, весьма прожорливые на память игры, запускаются и работают всегда.
То есть на мою игру виляет даже количество открытых приложений. Чем больше их открыто в фоне, тем меньше у меня памяти под текстуры.
Как кто с этим борется? Может я чего-то недопонимаю?
Спасибо.
glap
какого размера текстуры ?
возможна проблема в выделении временного буфера для загрузки текстуры, я описывал это здесь : http://forum.boolean.name/showthread.php?t=16880
Я упёрся в проблему на новом айпаде с ретиной, там текстурные атласы весьма внушительного размера. Зачастую приближаются к максимальному размеру текстуры в es 2.0.
Спасибо за статью, но вот ведь какая штука. Когда я выделяю память из кучи Мармелада и её не хватает, то он кидает ошибку, которую видно прежде чем приложение закрылось.
В моём случае никаких ошибок нет, просто быстрый и стремительный вылет.
Я уже попробовал оставить всё (в том числе выделение буфера под текстуру), но убрать загрузку в vram. Всё работает.
glap
посмотри дебагером чем вылетает, и кидаются ли memory warning'и от iOS, если получишь SIGKILL то это довольно интересно :)
ps. чуствую что тебе придется разковырять мармелад
В мармеладе нет как такового механизма отладки на устройстве. Можно только сообщения кидать, да впихнуть некий отладочный загрузчик, который никак в данном случае не поможет.
Ну и какой-то коллбэк ставить на системные сообщения тоже нельзя, он всё это держит в своих недрах, дабы обеспечить иллюзию кроссплатформенности.
Вообще проблема серьёзная, уверен есть какое-то решение. Тут как минимум несколько человек выпустили игры под Мармеладом. Товарисчи, нужна помощь!
glap
> Вообще проблема серьёзная, уверен есть какое-то решение. Тут как минимум
> несколько человек выпустили игры под Мармеладом. Товарисчи, нужна помощь!
А в чем собственно вопрос? Что на иосе приложение закрывается по мемери варнинг? Да, это так.
glap
> В мармеладе нет как такового механизма отладки на устройстве. Можно только
> сообщения кидать, да впихнуть некий отладочный загрузчик, который никак в
> данном случае не поможет.
Не верю! Да и гугл не верит.
Marmalade Mac supports native device debugging, with live console output, breakpoint and code step-though, using Xcode and the --iphone option. Launch the app's MKB from the command line with "--iphone" to create a native iOS Xcode project with full iOS debugging features. Note that the compiled app uses a special static library version of the iOS loader, which means it will differ from a normal Marmalade app in subtle ways and is NOT supported for App Store submission.
ЗЫ: В мармеладе не работал.
Вопрос в том, как это решают другие разработчики.
Если никаких программ не запущено кроме моей игры, то всё ок. Если я забиваю память до отказа другими играми, то вылетаю по памяти.
Но добиться, чтобы какая-то другая игра вылетела по схожим обстоятельствам мне не удалось.
jaguard
Через xCode да, но мы с винды работаем, тут с этим всё запущено.
Jun 24 21:55:57 unknown Pigs[6058] <Warning>: Received memory warning.
Jun 24 21:55:57 unknown Pigs[6058] <Warning>: [0x3f03cd98] DEVICE: iOS low memory warning occured
Jun 24 21:55:57 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilemail[0x2b4b]) Exited: Killed: 9
Jun 24 21:55:57 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilephone[0x5c3d]) Exited: Killed: 9
Jun 24 21:55:57 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.tunein.TuneInRadio[0x5b]) Exited: Killed: 9
Jun 24 21:55:57 unknown UserEventAgent[12] <Notice>: jetsam: kernel termination snapshot being created
Jun 24 21:55:57 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:G86VE2FRC3.com.mostro.kamikazepigs[0xd41b]) Exited: Killed: 9
Jun 24 21:55:57 unknown SpringBoard[75] <Warning>: Application 'Mail' exited abnormally with signal 9: Killed: 9
Jun 24 21:55:57 unknown SpringBoard[75] <Warning>: Application 'FaceTime' exited abnormally with signal 9: Killed: 9
Jun 24 21:55:57 unknown SpringBoard[75] <Warning>: Application 'TuneIn Radio' exited abnormally with signal 9: Killed: 9
Jun 24 21:55:58 unknown SpringBoard[75] <Warning>: Application 'Pigs' exited abnormally with signal 9: Killed: 9
Jun 24 21:55:58 unknown ReportCrash[6059] <Notice>: Saved crashreport to /Library/Logs/CrashReporter/LowMemory-2012-06-24-215558.plist using uid: 0 gid: 0, synthetic_euid: 0 egid: 0
Jun 24 21:55:58 unknown kernel[0] <Debug>: launchd[6060] Builtin profile: MobileMail (sandbox)
Jun 24 21:55:58 unknown kernel[0] <Debug>: launchd[6062] Builtin profile: container (sandbox)
Jun 24 21:55:58 unknown kernel[0] <Debug>: launchd[6062] Container: /private/var/mobile/Applications/3C986115-CF1C-457F-823F-5507DDE6F281 [69] (sandbox)
В общем помимо самой игры (Pigs) грохает ещё кучу программ.
glap
> Через xCode да, но мы с винды работаем, тут с этим всё запущено.
>
Купите макбук - без этого все-равно нормальной разработки не получится.
Что касается вашей проблемы, то тут все очевидно из лога - ваша программа сжирает всю память и умирает сама - скорее всего бага в логике загрузки, какой-нибудь бесконечный цикл или что-нибудь подобное. То что остальные программы завершаются - совершенно нормально, это типичное поведение ОС в условиях критической нехватки памяти.
Ну я полагал, что типичным поведение должна быть вызгрузка остальных программ, чтобы моей хватило памяти. Ведь если я сам предварительно убиваю их, то игра работает нормально. Никакой ошибки в логике нет.
glap
может ты за один раз хочешь слишком много памяти и оно киляет вообще всё ?
>Jun 24 21:55:57 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilemail[0x2b4b]) Exited: Killed: 9
>Jun 24 21:55:57 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilephone[0x5c3d]) Exited: Killed: 9
>Jun 24 21:55:57 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.tunein.TuneInRadio[0x5b]) Exited: Killed: 9
>Jun 24 21:55:57 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:G86VE2FRC3.com.mostro.kamikazepigs[0xd41b]) Exited: Killed: 9
первые три - как бы не ресурсоёмкие приложения особо
glap
> Ну я полагал, что типичным поведение должна быть вызгрузка остальных программ,
> чтобы моей хватило памяти. Ведь если я сам предварительно убиваю их, то игра
> работает нормально. Никакой ошибки в логике нет.
Попробуй поставить паузу между загрузками различных картинок. Судя по логу, ОС именно так и пытается сделать, только программы не успевают завершиться, количество памяти становится критическим и ОС киляет нарушителя спокойствия.
Тема в архиве.