Message ID | 147101602639.15723.14773982987486773596.stgit@fimbulvetr.bsc.es (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Aug 12, 2016 at 05:33:46PM +0200, Lluís Vilanova wrote: > An explicit if/else is clearer than arithmetic assuming #true is 1, > while the compiler should be able to generate just as optimal code. > > Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> > --- > stubs/trace-control.c | 17 +++++++++++++++-- > trace/control-target.c | 31 ++++++++++++++++++++++++++----- > 2 files changed, 41 insertions(+), 7 deletions(-) Reviewed-by: Daniel P. Berrange <berrange@redhat.com> > > diff --git a/stubs/trace-control.c b/stubs/trace-control.c > index 3740c38..2dfcd9f 100644 > --- a/stubs/trace-control.c > +++ b/stubs/trace-control.c > @@ -19,10 +19,23 @@ void trace_event_set_state_dynamic_init(TraceEvent *ev, bool state) > void trace_event_set_state_dynamic(TraceEvent *ev, bool state) > { > TraceEventID id; > + bool state_pre; > assert(trace_event_get_state_static(ev)); > id = trace_event_get_id(ev); > - trace_events_enabled_count += state - trace_events_dstate[id]; > - trace_events_dstate[id] = state; > + /* > + * We ignore the "vcpu" property here, since there's no target code. Then > + * dstate can only be 1 or 0. > + */ > + state_pre = trace_events_dstate[id]; > + if (state_pre != state) { > + if (state) { > + trace_events_enabled_count++; > + trace_events_dstate[id] = 1; > + } else { > + trace_events_enabled_count--; > + trace_events_dstate[id] = 0; > + } > + } > } > > void trace_event_set_vcpu_state_dynamic(CPUState *vcpu, > diff --git a/trace/control-target.c b/trace/control-target.c > index 4ee3733..72081e2 100644 > --- a/trace/control-target.c > +++ b/trace/control-target.c > @@ -16,10 +16,22 @@ > void trace_event_set_state_dynamic_init(TraceEvent *ev, bool state) > { > TraceEventID id = trace_event_get_id(ev); > + bool state_pre; > assert(trace_event_get_state_static(ev)); > - /* Ignore "vcpu" property, since no vCPUs have been created yet */ > - trace_events_enabled_count += state - trace_events_dstate[id]; > - trace_events_dstate[id] = state; > + /* > + * We ignore the "vcpu" property here, since no vCPUs have been created > + * yet. Then dstate can only be 1 or 0. > + */ > + state_pre = trace_events_dstate[id]; > + if (state_pre != state) { > + if (state) { > + trace_events_enabled_count++; > + trace_events_dstate[id] = 1; > + } else { > + trace_events_enabled_count--; > + trace_events_dstate[id] = 0; > + } > + } > } > > void trace_event_set_state_dynamic(TraceEvent *ev, bool state) > @@ -31,9 +43,18 @@ void trace_event_set_state_dynamic(TraceEvent *ev, bool state) > trace_event_set_vcpu_state_dynamic(vcpu, ev, state); > } > } else { > + /* Without the "vcpu" property, dstate can only be 1 or 0 */ > TraceEventID id = trace_event_get_id(ev); > - trace_events_enabled_count += state - trace_events_dstate[id]; > - trace_events_dstate[id] = state; > + bool state_pre = trace_events_dstate[id]; > + if (state_pre != state) { > + if (state) { > + trace_events_enabled_count++; > + trace_events_dstate[id] = 1; > + } else { > + trace_events_enabled_count--; > + trace_events_dstate[id] = 0; > + } > + } > } > } > > Regards, Daniel
diff --git a/stubs/trace-control.c b/stubs/trace-control.c index 3740c38..2dfcd9f 100644 --- a/stubs/trace-control.c +++ b/stubs/trace-control.c @@ -19,10 +19,23 @@ void trace_event_set_state_dynamic_init(TraceEvent *ev, bool state) void trace_event_set_state_dynamic(TraceEvent *ev, bool state) { TraceEventID id; + bool state_pre; assert(trace_event_get_state_static(ev)); id = trace_event_get_id(ev); - trace_events_enabled_count += state - trace_events_dstate[id]; - trace_events_dstate[id] = state; + /* + * We ignore the "vcpu" property here, since there's no target code. Then + * dstate can only be 1 or 0. + */ + state_pre = trace_events_dstate[id]; + if (state_pre != state) { + if (state) { + trace_events_enabled_count++; + trace_events_dstate[id] = 1; + } else { + trace_events_enabled_count--; + trace_events_dstate[id] = 0; + } + } } void trace_event_set_vcpu_state_dynamic(CPUState *vcpu, diff --git a/trace/control-target.c b/trace/control-target.c index 4ee3733..72081e2 100644 --- a/trace/control-target.c +++ b/trace/control-target.c @@ -16,10 +16,22 @@ void trace_event_set_state_dynamic_init(TraceEvent *ev, bool state) { TraceEventID id = trace_event_get_id(ev); + bool state_pre; assert(trace_event_get_state_static(ev)); - /* Ignore "vcpu" property, since no vCPUs have been created yet */ - trace_events_enabled_count += state - trace_events_dstate[id]; - trace_events_dstate[id] = state; + /* + * We ignore the "vcpu" property here, since no vCPUs have been created + * yet. Then dstate can only be 1 or 0. + */ + state_pre = trace_events_dstate[id]; + if (state_pre != state) { + if (state) { + trace_events_enabled_count++; + trace_events_dstate[id] = 1; + } else { + trace_events_enabled_count--; + trace_events_dstate[id] = 0; + } + } } void trace_event_set_state_dynamic(TraceEvent *ev, bool state) @@ -31,9 +43,18 @@ void trace_event_set_state_dynamic(TraceEvent *ev, bool state) trace_event_set_vcpu_state_dynamic(vcpu, ev, state); } } else { + /* Without the "vcpu" property, dstate can only be 1 or 0 */ TraceEventID id = trace_event_get_id(ev); - trace_events_enabled_count += state - trace_events_dstate[id]; - trace_events_dstate[id] = state; + bool state_pre = trace_events_dstate[id]; + if (state_pre != state) { + if (state) { + trace_events_enabled_count++; + trace_events_dstate[id] = 1; + } else { + trace_events_enabled_count--; + trace_events_dstate[id] = 0; + } + } } }
An explicit if/else is clearer than arithmetic assuming #true is 1, while the compiler should be able to generate just as optimal code. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> --- stubs/trace-control.c | 17 +++++++++++++++-- trace/control-target.c | 31 ++++++++++++++++++++++++++----- 2 files changed, 41 insertions(+), 7 deletions(-)