int get_resource_attr_int64(struct resource *resource, u_int64_t attr_id, int64_t *data);
int get_resource_attr_uint(struct resource *resource, u_int64_t attr_id, u_int32_t *data);
int get_resource_attr_uint64(struct resource *resource, u_int64_t attr_id, u_int64_t *data);
-int get_resource_attr_double(struct resource *resource, u_int64_t attr_id, double *data);
+int get_resource_attr_double(struct resource *resource, u_int64_t attr_id, double **data);
+int put_resource_attr_double(struct resource *resource, u_int64_t attr_id);
int get_resource_attr_string(struct resource *resource, u_int64_t attr_id, char **data);
int put_resource_attr_string(struct resource *resource, u_int64_t attr_id);
int get_resource_attr_array(struct resource *resource, u_int64_t attr_id,
GError *err = NULL;
struct display_fps_data fps_data;
int *disp_id;
+ double *fps;
int ret = 0;
if (!res || !res->priv || !attr || !data)
&fps_data.window, &fps_data.fps);
out:
- *data = (void *)(intptr_t)fps_data.fps;
+ fps = malloc(sizeof(double));
+ if (!fps) {
+ ret = -ENOMEM;
+ goto err_reply;
+ }
+
+ *fps = fps_data.fps;
+ *data = (void *)fps;
err_reply:
g_object_unref(reply);
void **data)
{
struct system_resouce_data *sysdata;
- double util;
+ double *util;
if (!res || !res->priv ||!attr || !data)
return -EINVAL;
+ util = malloc(sizeof(double));
+ if (!util)
+ return -ENOMEM;
+
sysdata = (struct system_resouce_data *)res->priv;
- util = __calculate_cpu_util(attr->id, &sysdata->prev_avg, &sysdata->curr_avg);
+ *util = __calculate_cpu_util(attr->id, &sysdata->prev_avg, &sysdata->curr_avg);
if (util < 0) {
_W("failed to calculate average cpu util (%s: %s)\n", res->name, attr->name);
- util = 0;
+ *util = 0.0;
}
- *data = (void *)(intptr_t)util;
+ *data = (void *)util;
return 0;
}
return 0;
}
-int get_resource_attr_double(struct resource *resource, u_int64_t attr_id, double *data)
+int get_resource_attr_double(struct resource *resource, u_int64_t attr_id, double **data)
{
struct resource_attribute_value *attr_value = NULL;
if (!attr_value)
return -EINVAL;
- *data = (double)(intptr_t)attr_value->data;
+ *data = (double *)attr_value->data;
+
+ return 0;
+}
+
+int put_resource_attr_double(struct resource *resource, u_int64_t attr_id)
+{
+ struct resource_attribute_value *attr_value = NULL;
+
+ if (!check_attr_validate(resource, attr_id, DATA_TYPE_DOUBLE))
+ return -EINVAL;
+
+ attr_value = get_resource_attr_value(resource, attr_id);
+ if (!attr_value)
+ return -EINVAL;
+
+ free(attr_value->data);
+ attr_value->data = NULL;
return 0;
}