מדידת ערכי הספק

יצרני מכשירים צריכים לספק פרופיל צריכת חשמל של רכיבים בפורמט /frameworks/base/core/res/res/xml/power_profile.xml.

כדי לקבוע את הערכים של פרופילי צריכת חשמל, צריך להשתמש בחומרה שמודדת את צריכת החשמל של המכשיר ולבצע את הפעולות השונות שנדרש לגביהן מידע. מודדים את צריכת החשמל במהלך הפעולות האלה ומחשבים את הערכים (מפיקים את ההבדלים משימושים אחרים בבסיס כנדרש).

המטרה של פרופיל צריכת חשמל היא להעריך את ניקוז הסוללה בצורה מדויקת, ולכן הערכים של פרופיל צריכת החשמל ניתנים בזרם (אמפר). ב-Android framework, הערך הנוכחי מוכפל בזמן שבו מערכת המשנה הייתה פעילה, ומחושב ערך ה-mAh. לאחר מכן, הערך הזה משמש להערכת כמות הסוללה שנוקזה על ידי האפליקציה או מערכת המשנה.

מכשירים עם בקרים של Bluetooth, מודם ו-Wi-Fi שמריצים Android 7.0 ומעלה יכולים לספק ערכי הספק נוספים שמתקבלים מנתוני ערכת השבבים.

מכשירים עם מעבדים הטרוגניים

פרופיל ההספק למכשירים עם ליבות CPU של ארכיטקטורה הטרוגנית חייב לכלול את השדות הנוספים הבאים:

  • מספר המעבדים הכולל לכל אשכול (מופיע כ-cpu.clusters.cores).
  • מהירויות המעבד שנתמכות בכל אשכול.
  • צריכת חשמל פעילה של CPU לכל אשכול.

כדי להבדיל בין צריכת חשמל פעילה של המעבד לבין מהירויות מעבד נתמכות עבור אשכולות, מוסיפים את מספר האשכול לשם המערך. מספרי האשכולות מוקצים לפי הסדר של ליבות ה-CPU בפירוט מבנה המכשיר (DT) של הליבה. לדוגמה, בארכיטקטורה הטרוגנית עם שני (2) אשכולות וארבע (4) ליבות:

  • ‫cluster0 מורכב מ-cpu0-3
  • ‫cluster1 מורכב מ-cpu4-7

מספרי ליבות ה-CPU האלה משמשים את מסגרת Android כשהיא קוראת נתונים סטטיסטיים מקובצי sysfs במיקום: /sys/devices/system/cpu/cpu<number>/cpufreq/stats.

דוגמה למעבדים ולמהירויות של אשכול:

<array name="cpu.active.cluster0">
<value>200</value>
<value>300</value>
<value>400</value>
</array>
<array name="cpu.speeds.cluster0">
<value>600000</value>
<value>800000</value>
<value>1200000</value>
</array>

<array name="cpu.active.cluster1">
<value>400</value>
<value>500</value>
<value>600</value>
</array>
<array name="cpu.speeds.cluster1">
<value>800000</value>
<value>1200000</value>
<value>1400000</value>
</array>

ערכי עוצמה

בטבלה הבאה מתוארות הגדרות עוצמת האות שזמינות. כדי לראות את קובץ הדוגמה ב-AOSP, אפשר לעיין ב-power_profile.xml.

שם תיאור ערך לדוגמה הערות
ambient.on יותר חשמל נצרך כשהמסך במצב שינה, במצב סביבתי או במצב 'תמיד פעיל' במקום במצב כבוי. בערך 100 mA -
screen.on הספק נוסף שמשמש כשהמסך מופעל בבהירות מינימלית. ‫200 mA כולל מסך מגע לבקרה ותאורה אחורית של המסך. בבהירות 0, ולא בבהירות המינימלית של Android, שהיא בדרך כלל 10% או 20%.
screen.full הספק נוסף שמשמש כשהמסך בבהירות מקסימלית, בהשוואה למסך בבהירות מינימלית. ‫100 mA-300 mA חלק מהערך הזה (בהתאם לבהירות המסך) מתווסף לערך screen.on כדי לחשב את צריכת החשמל של המסך.
wifi.on צריכת חשמל נוספת כש-Wi-Fi מופעל אבל לא מתקבלים נתונים, לא משודרים נתונים ולא מתבצע סריקה. ‫2 mA -
wifi.active צריכת חשמל נוספת בזמן שידור או קבלה דרך Wi-Fi. ‫31 mA -
wifi.scan צריכת חשמל נוספת בזמן סריקת נקודות גישה ל-Wi-Fi. ‫100 mA -
אודיו צריכת חשמל נוספת כשמפענחים או מקודדים אודיו באמצעות DSP. בסביבות 10 mA משמש לאודיו של DSP.
וידאו שימוש בכוח נוסף כשמפענחים סרטון באמצעות DSP. בסביבות 50 mA משמש לסרטונים ב-DSP.
camera.avg ממוצע השימוש באנרגיה על ידי מערכת המשנה של המצלמה באפליקציית מצלמה טיפוסית. ‫600 mA הערך הזה נועד לשמש כאומדן גס לאפליקציה שמציגה תצוגה מקדימה ומצלמת כ-10 תמונות ברזולוציה מלאה לדקה.
camera.flashlight ההספק הממוצע שבו נעשה שימוש במודול הפלאש של המצלמה כשהוא פועל. ‫200 mA -
gps.signalqualitybased הספק נוסף שמשמש את ה-GPS בהתאם לעוצמת האות. זהו ערך מרובה, אחד לכל עוצמת אות, מהחלשה ביותר לחזקה ביותר. ‫30 mA, ‏ 10 mA -
gps.on צריכת חשמל נוספת בזמן ש-GPS מחפש אות. ‫50 mA -
radio.active צריכת חשמל נוספת בזמן שידור או קליטה של רדיו סלולרי. ‫100 mA-300 mA -
radio.scanning צריכת חשמל נוספת כשמכשיר הרדיו הסלולרי שולח אותות זימון למגדל. ‫1.2 mA -
radio.on צריכת חשמל נוספת כשהרדיו הסלולרי מופעל. זהו ערך מרובה, אחד לכל עוצמת אות (ללא אות, חלש, בינוני, חזק). ‫1.2 mA חלק ממכשירי הרדיו מגבירים את עוצמת האות כשהם מחפשים מגדל תקשורת ולא מזהים אות. הערכים יכולים להיות זהים או להצטמצם ככל שעוצמת האות גדלה. אם מספקים רק ערך אחד, המערכת משתמשת באותו ערך לכל רמות החוזק. אם מספקים שני ערכים, הראשון משמש למצב ללא אות, השני משמש לכל שאר העוצמות וכן הלאה.
bluetooth.controller.idle צריכת הזרם הממוצעת (mA) של בקר ה-Bluetooth במצב לא פעיל. - הערכים האלה לא משוערים, אלא נלקחים מגיליון הנתונים של הבקר. אם יש כמה סטטוסים של קבלה או שידור, המערכת מחשבת את הממוצע שלהם. בנוסף, המערכת אוספת עכשיו נתונים לגבי סריקות Bluetooth וסריקות של Bluetooth עם צריכת אנרגיה נמוכה (LE).

ב-Android מגרסה 7.0 ואילך, המערכת לא משתמשת יותר בערכי ההספק של Bluetooth עבור bluetooth.active (בשימוש בהפעלת אודיו באמצעות Bluetooth A2DP) ועבור bluetooth.on (בשימוש כש-Bluetooth מופעל אבל לא פעיל).
bluetooth.controller.rx הצריכה הממוצעת של הזרם (mA) של בקר ה-Bluetooth בזמן קליטה. -
bluetooth.controller.tx הזרם הממוצע (במיליאמפר) של בקר ה-Bluetooth בזמן השידור. -
bluetooth.controller.voltage מתח הפעלה ממוצע (mV) של בקר ה-Bluetooth. -
modem.controller.sleep הצריכה הממוצעת של הזרם (mA) של בקר המודם במצב שינה. ‫0 mA הערכים האלה לא משוערים, אלא נלקחים מגיליון הנתונים של הבקר. אם יש כמה מצבי קבלה, המערכת מחשבת את הממוצע שלהם. אם יש כמה מצבי שידור, אפשר לציין ערך לכל מצב שידור החל מ-Android 9.
modem.controller.idle הצריכה הממוצעת של הזרם (mA) של בקר המודם במצב לא פעיל. -
modem.controller.rx הזרם הממוצע (במיליאמפר) שצורך בקר המודם בזמן קליטה. -
modem.controller.tx צריכת הזרם הממוצעת (mA) של בקר המודם בזמן שידור ברמות שונות של עוצמת תדרי הרדיו (RF). זהו ערך מרובה עם ערך אחד לכל רמת עוצמת שידור. ‫100 mA, ‏ 200 mA, ‏ 300 mA, ‏ 400 mA, ‏ 500 mA
modem.controller.voltage מתח הפעלה ממוצע (mV) של בקר המודם. -
wifi.controller.idle הזרם הממוצע (במיליאמפר) של בקר ה-Wi-Fi במצב לא פעיל. - הערכים האלה לא משוערים, אלא נלקחים מגיליון הנתונים של הבקר. אם יש כמה סטטוסים של קבלה או שידור, המערכת מחשבת את הממוצע שלהם.
wifi.controller.rx הצריכה הממוצעת של הזרם (במיליאמפר) של בקר ה-Wi-Fi בזמן קליטה. -
wifi.controller.tx הצריכה הממוצעת של זרם (mA) של בקר ה-Wi-Fi בזמן השידור. -
wifi.controller.voltage מתח הפעולה הממוצע (mV) של בקר ה-Wi-Fi. -
cpu.speeds זהו ערך מרובה שכולל רשימה של כל מהירויות המעבד האפשריות בקילוהרץ (KHz). ‫125,000 קילו-הרץ, 250,000 קילו-הרץ, 500,000 קילו-הרץ, 1,000,000 קילו-הרץ, 1,500,000 קילו-הרץ המספר והסדר של הערכים צריכים להתאים לערכי ה-mA ב-cpu.active.
cpu.idle הספק הכולל שהמערכת צורכת כשהמעבדים (ו-SoC) נמצאים במצב השעיה של המערכת. ‫3 mA -
cpu.awake הספק נוסף שמשמש כשהמעבדים נמצאים במצב המתנה לתזמון (kernel idle loop); המערכת לא נמצאת במצב השעיה. ‫50 mA יכול להיות שלפלטפורמה שלכם יש יותר ממצב סרק אחד בשימוש עם רמות שונות של צריכת חשמל. בחרו מצב סרק מייצג לתקופות ארוכות יותר של סרק בתזמן (כמה אלפיות שנייה). בודקים את תרשים ההספק בציוד המדידה ובוחרים דגימות שבהן צריכת המעבד היא הנמוכה ביותר, ומתעלמים מדגימות גבוהות יותר שבהן המעבד יצא ממצב המתנה.
‫cpu.active הספק נוסף שבו מעבדים משתמשים כשהם פועלים במהירויות שונות. ‫100 mA, ‏ 120 mA, ‏ 140 mA, ‏ 160 mA, ‏ 200 mA הערך מייצג את ההספק שמשתמשים בו ב-CPU rails כשמריצים אותו במהירויות שונות. מגדירים את המהירות המקסימלית בקרנל לכל אחת מהמהירויות המותרות, ומצמידים את המעבד למהירות הזו. המספר והסדר של הרשומות תואמים למספר ולסדר של הרשומות ב-cpu.speeds.
cpu.clusters.cores מספר ליבות המעבד בכל אשכול מעבדים. ‫4, 2 נדרש רק במכשירים עם ארכיטקטורות מעבדים הטרוגניות. מספר הרשומות והסדר שלהן צריכים להיות זהים למספר הרשומות של האשכולות עבור cpu.active ו-cpu.speeds. הערך הראשון מייצג את מספר ליבות ה-CPU ב-cluster0, הערך השני מייצג את מספר ליבות ה-CPU ב-cluster1 וכן הלאה.
battery.capacity קיבולת הסוללה הכוללת במיליאמפר לשעה. ‫3,000 מיליאמפר לשעה -

סריקות של Bluetooth ו-LE (צריכת אנרגיה נמוכה)

במכשירים עם Android 7.0, המערכת אוספת נתונים לסריקות של Bluetooth עם צריכת אנרגיה נמוכה (LE) ולתעבורת רשת של Bluetooth (כמו RFCOMM ו-L2CAP), ומשייכת את הפעילויות האלה לאפליקציה שהפעילה אותן. סריקות של Bluetooth משויכות לאפליקציה שהפעילה את הסריקה, אבל סריקות אצווה לא משויכות (אלא משויכות לאפליקציית Bluetooth). אם אפליקציה סורקת במשך N אלפיות שנייה, עלות הסריקה היא N אלפיות שנייה של זמן קבלה (rx) ו-N אלפיות שנייה של זמן שידור (tx). כל הזמן שנותר לבקר מוקצה לתעבורת רשת או לאפליקציית Bluetooth.