~ubuntu-branches/ubuntu/trusty/rawstudio/trusty-proposed

« back to all changes in this revision

Viewing changes to src/rs-preload.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2008-10-18 17:58:00 UTC
  • mfrom: (2.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20081018175800-r1s7ke1xwy9wxv5b
Tags: 1.1.1-1
MergingĀ upstreamĀ versionĀ 1.1.1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
140
140
worker_thread(gpointer data, gpointer bogus)
141
141
{
142
142
        gchar *filename = (gchar *) data;
143
 
        RS_FILETYPE *filetype = NULL;
144
143
        RS_PHOTO *photo = NULL;
145
144
 
146
 
        if ((filetype = rs_filetype_get(filename, TRUE)))
 
145
        photo = rs_photo_load_from_file(filename, TRUE);
 
146
        if (photo)
147
147
        {
148
 
                photo = filetype->load(filename, TRUE);
149
 
                if (photo)
150
 
                {
151
 
                        GList *q = NULL;
152
 
                        size_t footprint = rs_image16_get_footprint(photo->input);
153
 
                        RS_PRELOADED *p = g_new0(RS_PRELOADED, 1);
154
 
                        p->filename = filename;
155
 
                        p->image = photo->input;
156
 
                        PRELOAD_DEBUG("\033[34mPreloading %s\033[0m\n", filename);
157
 
                        photo->input = NULL; /* EVIL hack to avoid freeing in rs_photo_free() */
158
 
                        g_object_unref(photo);
159
 
 
160
 
                        g_static_mutex_lock(&queue_lock);
161
 
                        g_static_mutex_lock(&preloaded_lock);
162
 
 
163
 
                        while((preloaded_memory_in_use + footprint) > max_memory)
164
 
                                _remove_one_image();
165
 
                        preloaded_memory_in_use += footprint;
166
 
 
167
 
                        /* Move from queue to preloaded */
168
 
                        if ((q = g_list_find_custom(queue, filename, g_list_str_equal)))
169
 
                                queue = g_list_remove_link(queue, q);
170
 
                        preloaded = g_list_prepend(preloaded, p);
171
 
 
172
 
                        g_static_mutex_unlock(&preloaded_lock);
173
 
                        g_static_mutex_unlock(&queue_lock);
174
 
 
175
 
                        /* Calculate average image size */
176
 
                        g_static_mutex_lock(&average_size_lock);
177
 
                        if (average_size == 0)
178
 
                                average_size = footprint;
179
 
                        else
180
 
                                average_size = (average_size+footprint+1)/2;
181
 
                        g_static_mutex_unlock(&average_size_lock);
182
 
                }
 
148
                GList *q = NULL;
 
149
                size_t footprint = rs_image16_get_footprint(photo->input);
 
150
                RS_PRELOADED *p = g_new0(RS_PRELOADED, 1);
 
151
                p->filename = filename;
 
152
                p->image = photo->input;
 
153
                PRELOAD_DEBUG("\033[34mPreloading %s\033[0m\n", filename);
 
154
                photo->input = NULL; /* EVIL hack to avoid freeing in rs_photo_free() */
 
155
                g_object_unref(photo);
 
156
 
 
157
                g_static_mutex_lock(&queue_lock);
 
158
                g_static_mutex_lock(&preloaded_lock);
 
159
 
 
160
                while((preloaded_memory_in_use + footprint) > max_memory)
 
161
                        _remove_one_image();
 
162
                preloaded_memory_in_use += footprint;
 
163
 
 
164
                /* Move from queue to preloaded */
 
165
                if ((q = g_list_find_custom(queue, filename, g_list_str_equal)))
 
166
                        queue = g_list_remove_link(queue, q);
 
167
                preloaded = g_list_prepend(preloaded, p);
 
168
 
 
169
                g_static_mutex_unlock(&preloaded_lock);
 
170
                g_static_mutex_unlock(&queue_lock);
 
171
 
 
172
                /* Calculate average image size */
 
173
                g_static_mutex_lock(&average_size_lock);
 
174
                if (average_size == 0)
 
175
                        average_size = footprint;
 
176
                else
 
177
                        average_size = (average_size+footprint+1)/2;
 
178
                g_static_mutex_unlock(&average_size_lock);
183
179
        }
184
180
        PRELOAD_DEBUG("\033[33m[%zd/%zdMB used] [%d tasks unprocessed] [%zdMB avg]\033[0m\n", preloaded_memory_in_use/(1024*1024), max_memory/(1024*1024), g_thread_pool_unprocessed(pool), average_size/(1024*1024));
185
181
}