mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Reduce Switch component memory usage by 8 bytes per instance
This commit is contained in:
		| @@ -21,7 +21,7 @@ const int RESTORE_MODE_PERSISTENT_MASK = 0x02; | |||||||
| const int RESTORE_MODE_INVERTED_MASK = 0x04; | const int RESTORE_MODE_INVERTED_MASK = 0x04; | ||||||
| const int RESTORE_MODE_DISABLED_MASK = 0x08; | const int RESTORE_MODE_DISABLED_MASK = 0x08; | ||||||
|  |  | ||||||
| enum SwitchRestoreMode { | enum SwitchRestoreMode : uint8_t { | ||||||
|   SWITCH_ALWAYS_OFF = !RESTORE_MODE_ON_MASK, |   SWITCH_ALWAYS_OFF = !RESTORE_MODE_ON_MASK, | ||||||
|   SWITCH_ALWAYS_ON = RESTORE_MODE_ON_MASK, |   SWITCH_ALWAYS_ON = RESTORE_MODE_ON_MASK, | ||||||
|   SWITCH_RESTORE_DEFAULT_OFF = RESTORE_MODE_PERSISTENT_MASK, |   SWITCH_RESTORE_DEFAULT_OFF = RESTORE_MODE_PERSISTENT_MASK, | ||||||
| @@ -49,12 +49,12 @@ class Switch : public EntityBase, public EntityBase_DeviceClass { | |||||||
|    */ |    */ | ||||||
|   void publish_state(bool state); |   void publish_state(bool state); | ||||||
|  |  | ||||||
|   /// The current reported state of the binary sensor. |  | ||||||
|   bool state; |  | ||||||
|  |  | ||||||
|   /// Indicates whether or not state is to be retrieved from flash and how |   /// Indicates whether or not state is to be retrieved from flash and how | ||||||
|   SwitchRestoreMode restore_mode{SWITCH_RESTORE_DEFAULT_OFF}; |   SwitchRestoreMode restore_mode{SWITCH_RESTORE_DEFAULT_OFF}; | ||||||
|  |  | ||||||
|  |   /// The current reported state of the binary sensor. | ||||||
|  |   bool state; | ||||||
|  |  | ||||||
|   /** Turn this switch on. This is called by the front-end. |   /** Turn this switch on. This is called by the front-end. | ||||||
|    * |    * | ||||||
|    * For implementing switches, please override write_state. |    * For implementing switches, please override write_state. | ||||||
| @@ -123,10 +123,16 @@ class Switch : public EntityBase, public EntityBase_DeviceClass { | |||||||
|    */ |    */ | ||||||
|   virtual void write_state(bool state) = 0; |   virtual void write_state(bool state) = 0; | ||||||
|  |  | ||||||
|   CallbackManager<void(bool)> state_callback_{}; |   // Pointer first (4 bytes) | ||||||
|   bool inverted_{false}; |  | ||||||
|   Deduplicator<bool> publish_dedup_; |  | ||||||
|   ESPPreferenceObject rtc_; |   ESPPreferenceObject rtc_; | ||||||
|  |  | ||||||
|  |   // CallbackManager (12 bytes on 32-bit - contains vector) | ||||||
|  |   CallbackManager<void(bool)> state_callback_{}; | ||||||
|  |  | ||||||
|  |   // Small types grouped together | ||||||
|  |   Deduplicator<bool> publish_dedup_;  // 2 bytes (bool has_value_ + bool last_value_) | ||||||
|  |   bool inverted_{false};              // 1 byte | ||||||
|  |   // Total: 3 bytes, 1 byte padding | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #define LOG_SWITCH(prefix, type, obj) log_switch((TAG), (prefix), LOG_STR_LITERAL(type), (obj)) | #define LOG_SWITCH(prefix, type, obj) log_switch((TAG), (prefix), LOG_STR_LITERAL(type), (obj)) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user