В наше время мобильные устройства пользуются большой популярностью, и их число с каждым днем растет. С ростом популярности мобильных устройств выросли и требования к энергоэффективности аппаратных средств и программного обеспечения.
Важным пунктом на пути к выгодному использованию энергии является участие в процессе разработки всех, кто связан с мобильными устройствами. Инженеры создают энергоэффективное аппаратное обеспечение, а разработчики начинают пользоваться программными средствами для анализа потребления энергии приложением. Максимальной энергоэффективности можно достичь посредством координированных усилий. Если приложение будет написано неэффективно, то каким бы энергоэффективным ни был бы процессор, аккумулятор устройства не будет использоваться оптимально.
На помощь разработчикам программного обеспечения приходят не только инструменты профилирования, но и подходы в написании кода, получившие название «зелёных» паттернов, которые тоже вносят свой вклад в энергопотребление.
В работе [5] среди разработчиков был проведен опрос, чтобы выяснить их осведомленность о влиянии использования паттернов на энергопотребление. Результаты говорят о том, что большинство не учитывает их возможное влияние на энергозатраты при разработке. Исходя из результатов, можно предположить, что open-source проекты могут содержать неэнергоэффективный код.
В данной работе предлагается провести обзор «зелёных» паттернов и внедрить набор оптимизационных решений, которые будут основаны на использовании энергоэффективных структур данных и на рефакторинге кода по удалению из него паттерна «Декоратор», и оценить энергосберегающий эффект.
1. Постановка задачи
Целью работы является исследование влияния специализированных приемов программирования (т.н. «зелёных» паттернов) на энергопотребление в рамках Android-приложения. Для её выполнения были поставлены следующие задачи:
1. провести обзор влияния «зелёных» паттернов и паттернов проектирования на энергопотребление;
2. выбрать Android-приложения для дальнейшей оптимизации;
3. определить методологию экспериментов и реализовать вспомогательные скрипты для проведения замеров;
4. внедрить набор оптимизаций, уменьшающих энергопотребление в рамках Android-приложений;
5. сравнить результаты замеров энергопотребления до и после внедрения оптимизаций.
В ходе работы были получены следующие результаты:
1. проведен обзор влияния «зелёных» паттернов и паттернов проектирования на энергопотребление;
2. внедрена энергоэффективная структура данных HashedMap в Remixed Dungeon и Hentoid;
3. описана методология и реализованы вспомогательные скрипты для автоматизации сборов показателей энергопотребления и прогона тестового сценария использования Android-приложений;
4. проведены замеры энергопотребления до и после внедрения оптимизаций, а также проведена статистическая обработка полученных данных. Для приложений Remixed Dungeon и Hentoid после внедрения энергоэффективной коллекции HashedMap выигрыш в энергопотреблении составил 0.58% и 0.6% соответственно. В рамках приложения Remixed Dungeon был реализован паттерн «Декоратор» для оценки энергопотребления до и после применения оптимизации, после удаления паттерна декоратор выигрыш в энергопотреблении составил 4.19%. Стоит отметить, что оптимизация по замене структуры данных увеличила размер собранного приложения, но сама по себе не является трудозатратной. Удаление паттерна «Декоратор» понесло за собой утрату поддерживаемо- сти и расширяемости кода при относительно небольшом выигрыше в энергозатратах.
[1] Android Debug Bridge.— URL: https://developer.android.com/ tools/adb (дата обращения: 28 апреля 2024 г.).
[2] Apache Collections.— URL: https://commons.apache.org/proper/ commons-collections (дата обращения: 28 апреля 2024 г.).
[3] Connolly Bree Deaglan, Cinneide Mel O. Removing Decorator to Improve Energy Efficiency // 2022 IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER).— 2022.— P. 902-912.— URL: https://doi.org/10.1109/SANER53432.2022. 00108 (дата обращения: 10 октября 2023 г.).
[4] Eclipse Collections. -- URL: https://eclipse.dev/collections/ (дата обращения: 28 апреля 2024 г.).
[5] An Empirical Study on the Impact of Deep Parameters on Mobile App Energy Usage / Qiang Xu, James C. Davis, Y. Charlie Hu, Abhilash Jindal // 2022 IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER).— 2022.— P. 844-855.— URL: https://doi.org/10.1109/SANER53432.2022. 00103 (дата обращения: 11 октября 2023 г.).
[6] Hentoid.— URL: https://github.com/avluis/Hentoid (дата обращения: 28 апреля 2024 г.).
[7] Improving Energy-Efficiency by Recommending Java Collections / Wellington Oliveira, Renato Oliveira, Fernando Castor et al. // Empirical Softw. Engg.— 2021.—may.— Vol. 26, no. 3.— 45 p.— URL: https://doi.org/10.1007/s10664-021-09950-y (дата обращения: 11 октября 2023 г.).
[8] Initial explorations on design pattern energy usage / Cagri Sahin, Furkan Cayci, Irene Lizeth Manotas Gutierrez et al. // 2012 First International Workshop on Green and Sustainable Software (GREENS).— 2012,— P. 55-61,— URL: https://doi.org/10.1109/GREENS.2012. 6224257 (дата обращения: 10 октября 2023 г.).
[9] Navitas Framework. Энергопотребление экранов смартфонов. — URL: https://se.math.spbu.ru/thesis/texts/Motyka_Artem_
Igorevichch_Bachelor_Report_2022_text.pdf (дата обращения: 20 мая 2024 г.).
[10] Remixed Dungeon.— URL: https://github.com/NYRDS/ remixed-dungeon (дата обращения: 28 апреля 2024 г.).
[11] Rooting (Android).— URL: https://en.wikipedia.org/wiki/ Rooting_(Android) (дата обращения: 23 мая 2024 г.).
[12] Software design pattern.— URL: https://en.wikipedia.org/wiki/ Software_design_pattern (дата обращения: 20 февраля 2024 г.).
[13] Understanding the impact of object oriented programming and design patterns on energy efficiency / Sepideh Maleki, Cuijiao Fu, Arun Banotra, Ziliang Zong // 2017 Eighth International Green and Sustainable Computing Conference (IGSC).— 2017.— P. 1
6. — URL: https://doi.org/10.1109/IGCC.2017.8323605 (дата обращения: 12 октября 2023 г.).
[14] What is eating up battery life on my SmartPhone: A case study / Grace Metri, Abhishek Agrawal, Ramesh Peri, Weisong Shi // 2012 International Conference on Energy Aware Computing. — 2012. — P. 16.— URL: https://doi.org/10.1109/ICEAC.2012.6471003 (дата обращения: 20 мая 2024 г.).
[15] A catalogue of game-specific anti-patterns based on GitHub and
Game Development Stack Exchange / Vartika Agrahari, Shri- ram Shanbhag, Sridhar Chimalakonda, A. Eashaan Rao // Journal of Systems and Software. — 2023. — Vol. 204. —
P. 111789.— URL: https://www.sciencedirect.com/science/ article/pii/S016412122300184X (дата обращения: 10 октября 2023 г.).
[16] Каталог паттернов проектирования.— URL: https: //refactoringguru.cn/ru/design-patterns/catalog (дата обращения: 20 февраля 2024 г.).
[17] Управление энергопотреблением процессора на основе стохастической оптимизации.— URL: https://disser.spbu.ru/ files/2023/disser_sartasov_stanislav.pdf (дата обращения: 23 мая 2024 г.).